LNK2001: Мои библиотеки наддува (вероятно) построены неправильно
Я решил обновить свои библиотеки надстроек с 1.61 до 1.63, и в проекте, который я обновил для использования новых файлов, я получаю несколько новых сообщений об ошибках, которых раньше не было:
error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
Поскольку мои библиотеки 1.63 компилируются с использованием Visual Studio 2017, мое первое предположение состоит в том, что я допустил ошибку при компиляции библиотек boost, поэтому вот общие шаги, которые я предпринимаю из чистой распаковки файлов boost:
- Меню "Пуск" →Visual Studio 2017 RC→ Командная строка разработчика
- Я меняю каталог, пока не окажусь на высоком уровне
boost_1_63_0
папка. - я бегу
bootstrap.bat
- я открываю
project-config.jam
для редактирования - я меняю
using msvc ;
вusing msvc : 14.1 : E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\;
- я открываю
boost/config/auto_link.hpp
для редактирования - Я делаю правку для этого файла (код, указанный ниже после списка)
- В открытой командной строке я выполняю команду
b2 architecture=x86 address-model=64 link=static threading=multi runtime-link=shared --build-type=complete stage --stagedir=stage/x64 -a
- Он заканчивается следующим сообщением в конце (перечислены ниже после списка)
- Я пытаюсь использовать эти библиотеки с моим кодом, используя
#define BOOST_LIB_DIAGNOSTIC
отслеживать, что правильные файлы используются (они есть). - Я пытаюсь скомпилировать свой проект, использующий boost.asio, и получаю две нерешенные ошибки внешних символов, перечисленные выше.
Кто-нибудь знает, где моя ошибка? Эти ошибки не возникают, если я использую библиотеки boost 1.61, скомпилированные с использованием Visual Studio 2015 в Visual Studio 2017 RC.
auto_link.hpp (old):
# elif defined (BOOST_MSVC)
// vc14:
# define BOOST_LIB_TOOLSET "vc140"
auto_link.hpp (новый):
# elif defined (BOOST_MSVC) && (BOOST_MSVC < 1910)
// vc14:
# define BOOST_LIB_TOOLSET "vc140"
# elif defined (BOOST_MSVC)
// vc15:
# define BOOST_LIB_TOOLSET "vc141"
Сообщение в конце процесса ускоренной компиляции:
...failed updating 6 targets...
...skipped 4 targets...
...updated 904 targets...
Библиотеки, показанные с помощью #define BOOST_LIB_DIAGNOSTIC
:
1>Linking to lib file: libboost_system-vc141-mt-1_63.lib
1>Linking to lib file: libboost_date_time-vc141-mt-1_63.lib
1>Linking to lib file: libboost_regex-vc141-mt-1_63.lib
Дайте мне знать, если нужна какая-либо другая диагностическая информация. Я попытался закомментировать различные варианты использования библиотеки boost.asio, но только удаление заголовка полностью устранило эти проблемы (что, конечно, делало компоненты boost непригодными для использования).
1 ответ
Это похоже на ошибку LNK 2019 с использованием Boost::asio, поскольку у вас есть те же ошибки.
Я только что установил VS2017RC и повысил 1.63. Затем я использовал это описание: Build Boost с MSVC 14.1 ( VS2017 RC). Примечание: ваша линия
using msvc : 14.1 : E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\;
вероятно, должны включать в себя "cl.exe" и кавычки.
using msvc : 14.1 : "E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\cl.exe";
... Они должны реализовать индикатор выполнения или такой;) Угадайте, что:
...failed updating 6 targets...
...skipped 4 targets...
...updated 1214 targets...
Итак, посмотрите на сообщение об ошибке:
msvc.compile.asm bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj
'ml64' is not recognized as an internal or external command, operable program or batch file.
ml64 -nologo -c -Zp4 -Cp -Cx -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTEXT_EXPORT= -DBOOST_CONTEXT_SOURCE -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTEXT_EXPORT= -DBOOST_CONTEXT_SOURCE /Zi /Zd /W3 -Fo "bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj" "libs\context\src\asm\make_x86_64_ms_pe_masm.asm"
...failed msvc.compile.asm bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj...
Отсутствуют 64-битные зависимости... Итак, как говорит KindDragon во второй ссылке:
Запустите "Командная строка разработчика для VS 2017 RC" из меню "Пуск" Windows, чтобы повысить скорость из оболочки, настроенной с использованием x86 vcvars или x64 vcvars.
Необходимо настроить оболочку с использованием 64-битных переменных компилятора.
cd "\Program Files (x86)\Microsoft Visual Studio 14.0\VC"
vcvarsall amd64
.. Или вы можете запустить собственную среду x64 из меню Пуск: -> Visual Studio 201x -> Visual Studio Tools -> Windows Desktop Command Prompts -> VS201x x64 Native Tools Command Prompt
А потом строить снова.
...failed updating 2 targets...
...skipped 2 targets...
...updated 6 targets...
С сообщением об ошибке fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
, Таким образом, требуется восстановление.
b2 --clean-all
etc...
... Вы поняли. Но, похоже, я сейчас прочитал в комментариях, что Богдан также упомянул об этом. Ну, Kinddragon в Build Boost с MSVC 14.1 ( VS2017 RC) был фактически первым;)