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:

  1. Меню "Пуск" →Visual Studio 2017 RC→ Командная строка разработчика
  2. Я меняю каталог, пока не окажусь на высоком уровне boost_1_63_0 папка.
  3. я бегу bootstrap.bat
  4. я открываю project-config.jam для редактирования
  5. я меняю using msvc ; в using msvc : 14.1 : E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\;
  6. я открываю boost/config/auto_link.hpp для редактирования
  7. Я делаю правку для этого файла (код, указанный ниже после списка)
  8. В открытой командной строке я выполняю команду b2 architecture=x86 address-model=64 link=static threading=multi runtime-link=shared --build-type=complete stage --stagedir=stage/x64 -a
  9. Он заканчивается следующим сообщением в конце (перечислены ниже после списка)
  10. Я пытаюсь использовать эти библиотеки с моим кодом, используя #define BOOST_LIB_DIAGNOSTIC отслеживать, что правильные файлы используются (они есть).
  11. Я пытаюсь скомпилировать свой проект, использующий 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) был фактически первым;)

Другие вопросы по тегам