ошибка компоновки: неоднозначный libboost * .lib против boost * .lib

Я использую повышение в моем проекте. Я скачал скомпилированные бинарные файлы отсюда http://boost.teeks99.com/

При связывании получаю такую ​​ошибку:

Error 18 error LNK2005: "public: void __cdecl boost::thread::join(void)" (?join@thread@boost@@QEAAXXZ) already defined in boost_thread-vc110-mt-1_52.lib(boost_thread-vc110-mt-1_52.dll) C:\Oleg\projects\MBClient\FastNativeAdapter\libboost_thread-vc110-mt-1_52.lib(thread.obj) FastNativeAdapter

Почему буст содержит два lib с таким похожим названием, в чем разница между ними?

  • libboost_thread-vc110-мт-1_52.lib
  • boost_thread-vc110-мт-1_52.lib

Как исправить ошибку компоновки?

обн Я скомпилировал повышение сам. я добавил boost_1_53_0\stage\lib каталог для компоновщика. Этот каталог на самом деле содержит 3 «копии» «каждого» файла, например:

  • boost_atomic-vc110-мт-1_53.dll
  • boost_atomic-vc110-мт-1_53.lib
  • libboost_atomic-vc110-мт-1_53.lib

Так что понятно, о чем заявляет компилятор. Каким-то образом он не может понять, какую версию файла lib использовать. Вероятно, это связано со статическим / динамическим связыванием, но я до сих пор не могу найти решение. Я уверен, что мои проблемы довольно распространены, поэтому я надеюсь, что кто-то может подсказать мне, что делать.

Я пытался удалить все файлы «libboost *» из папки, но затем я получаю такую ​​ошибку:
Error 15 error LNK1104: cannot open file 'libboost_date_time-vc110-mt-1_53.lib'

Я пытался удалить все файлы «boost * lib» из папки, но затем я получаю такую ​​ошибку:
Error 15 error LNK1104: cannot open file 'boost_thread-vc110-mt-1_53.lib'

Потом я скопировал boost_thread-vc110-mt-1_53.lib назад, и я получаю много ошибок, как это:

Error 16 error LNK2005: "public: virtual __cdecl boost::detail::thread_data_base::~thread_data_base(void)" (??1thread_data_base@detail@boost@@UEAA@XZ) already defined in boost_thread-vc110-mt-1_53.lib(boost_thread-vc110-mt-1_53.dll)

Поэтому, когда нет boost_thread-vc110-mt-1_53.lib компилятор утверждает, что он отсутствует, когда есть boost_thread-vc110-mt-1_53.lib Компилятор утверждает, что «функция уже определена». Пробалы как-то я использую динамическое и статическое связывание одновременно или что-то в этом роде?

UPD2 я не прокомментировал #define BOOST_ALL_DYN_LINK как предложено Вот и теперь код компилируется! Я расследую, все ли в порядке. Однако я не понимаю, почему я должен раскомментировать #define BOOST_ALL_DYN_LINK поэтому комментарии приветствуются.

9

Решение

Редактировать: первоначальное утверждение удалено, так как редактирование поста изменило ситуацию.

На основе http://www.boost.org/doc/libs/1_53_0/more/getting_started/unix-variants.html#library-naming (предоставлено Игорем Р.):

libboost_thread-vc110-mt-1_52.lib — это статическая библиотека (нет необходимости в DLL)
boost_thread-vc110-mt-1_52.lib — это библиотека импорта для DLL

Вам нужно только использовать один из них.

7

Другие решения

Я думаю, что в первую очередь вам нужно исправить свой вопрос. Вы имеете в виду (я думаю, вы уже знаете разницу между DLL а также LIB )

  • libboost_thread-vc110-мт-1_52.lib
  • boost_thread-vc110-мт-1_52.длл

или же

  • libboost_thread-vc110-мт-1_52.lib
  • boost_thread-vc110-мт-1_52.Lib

Во всяком случае, похоже, проблема в том, что вы смешиваете статические (libboost_thread-vc110-mt-1_52.lib) и поделился (boost_thread-vc110-mt-1_52.lib) повысить библиотеки. Но без рабочей среды и деталей платформы я не смогу найти точное решение. Если вы работаете в Visual Studio тогда вы можете перейти к right click on project file > properties > linker > input > ignore specific library и добавить libboost_thread-vc110-mt-1_52.lib там и попробуй.

0

задаю вопрос сам.
нужно раскомментировать #define BOOST_ALL_DYN_LINK (см. описание)

0

Еще одна идея / решение, чтобы попробовать, если вы нажмете error LNK1104: cannot open file 'libboost_date_time-*.lib' ошибка:

В наш проект мы включили boost/date_time.hpp файл. Определяем постоянную BOOST_ALL_NO_LIB вместо BOOST_ALL_DYN_LINK в настройках нашего проекта нужно сказать, чтобы boost не автоматически выбирал библиотеки для ссылки.
Увидеть повышение документация Для получения дополнительной информации об этой опции.

Чтобы вы могли добавить BOOST_ALL_NO_LIB в Свойствах проекта -> C / C ++ -> Препроцессор -> Определения препроцессора и проверьте, исчезла ли ошибка компоновщика.

0
По вопросам рекламы [email protected]