Я использую повышение в моем проекте. Я скачал скомпилированные бинарные файлы отсюда 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
с таким похожим названием, в чем разница между ними?
Как исправить ошибку компоновки?
обн Я скомпилировал повышение сам. я добавил boost_1_53_0\stage\lib
каталог для компоновщика. Этот каталог на самом деле содержит 3 «копии» «каждого» файла, например:
Так что понятно, о чем заявляет компилятор. Каким-то образом он не может понять, какую версию файла 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
поэтому комментарии приветствуются.
Редактировать: первоначальное утверждение удалено, так как редактирование поста изменило ситуацию.
На основе 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
Вам нужно только использовать один из них.
Я думаю, что в первую очередь вам нужно исправить свой вопрос. Вы имеете в виду (я думаю, вы уже знаете разницу между DLL
а также 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
там и попробуй.
задаю вопрос сам.
нужно раскомментировать #define BOOST_ALL_DYN_LINK (см. описание)
Еще одна идея / решение, чтобы попробовать, если вы нажмете 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 ++ -> Препроцессор -> Определения препроцессора и проверьте, исчезла ли ошибка компоновщика.