При компиляции проекта Visual Studio 2005 года, который ссылается на соединение C++ управляемый/неуправляемый код, я получаю следующую ошибку:
1> ССЫЛКА: фатальная ошибка LNK1104: не может открыть файл 'libboost_date_time-vc80-mt-1_42.lib'
Я следовал Руководству по началу работы. Из уместности этот отрывок:
"Повышение. DateTime имеет двоичный компонент, который только необходим, если Вы используете его to_string/from_string или функции сериализации, или если Вы нацелены на Visual C++ 6.x или Borland".
Я сделал глобальный поиск "to_string" и "from_string". Нет никаких случаев в коде этих методов DateTime.
В документации для самой библиотеки DateTime существует этот отрывок:
"Библиотека имеет несколько функций, которые требуют создания файла библиотеки (главным образом to_string, from_string функции). Пользователи библиотеки Most могут сделать эффективное использование библиотеки, не создавая библиотеку, но просто включая необходимые заголовки. Если библиотека будет необходима, то Jamfile в каталоге сборки произведет "статическую" библиотеку (libboost_date_time) и "динамическую/общую" библиотеку (boost_date_time), который содержит эти функции".
Как был бы, я добрался о решении этого вопроса? Легкое решение состоит в том, чтобы создать библиотеку или использовать двоичный установщик Windows от BoostPro, однако это беспокоит меня, что скомпилированная библиотека требуется, когда согласно документации я не нахожусь в ситуации, которая требует его.
Другим вопросом является DateTime documenation, кажется indiciate, что его "главным образом to_string, from_string)", мой код мог, возможно, ссылаться на некоторую другую функцию, которая потребовала бы создания файла библиотеки? Кто-либо знает то, что включены другие функции? Есть ли функции, которые сами переносят или называют to_string или from_string?
Единственное включение, которое я использую:
#include
Проект компилируется и связывается без ошибок после следующего устранения неполадок:
Я определил BOOST_LIB_DIAGNOSTIC - чтобы узнать, что диагностический вывод, который я мог получить от автоматического компоновщика. Не слишком информативно:
1> Ссылка на файл библиотеки: libboost_date_time-vc80-mt-1_42.lib
1> ССЫЛКА: фатальная ошибка LNK1104: невозможно открыть файл libboost_date_time-vc80-mt-1_42 .lib '
Затем я определил BOOST_ALL_NO_LIB = 1 - отключает все автоматические ссылки. Теперь проект компилируется и подключается чисто.
Заголовки Boost используют прагму, чтобы сообщить компиляторам, когда искать файл lib. Хотя библиотека date_time этого не делает, другие заголовки в boost зависят от do.
boost поставляется с инструментом под названием bcp, который можно использовать для извлечения именно того подмножества, которое вам нужно. взгляните, похоже, вы найдете это полезным.
Возможно, вы включаете «неправильный» заголовок, который заставляет компилятор связываться с библиотекой, даже если он вам не нужен. Найдите комментарий #pragma (lib, ...) в заголовках повышения, чтобы узнать, так ли это.