Исполняемый файл Visual C ++ не будет работать без библиотек Boost - PullRequest
0 голосов
/ 11 декабря 2018

Я использую Visual Studio для компиляции проекта C++, используя CMake в качестве системы сборки.

Кроме того, я ссылаюсь на библиотеку Boost.Однако выходной исполняемый файл не будет запущен, если в переменной среды PATH не найдены следующие Boost DLL s: boost_filesystem-vc141-mt-x64-1_69.dll и boost_iostreams-vc141-mt-x64-1_69.dll.

Согласно документации , я попытался использовать /MT («Заставляет приложение использовать многопоточную, статическую версию библиотеки времени выполнения»), а также /MD («Заставляет приложение использовать многопоточный и DLL-специфическая версия библиотеки времени выполнения "), но помимо влияния на размер файла, зависимость DLL от Boost не изменилась.

Я также указал следующие CMake переменные:

set(BOOST_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)

Это также не вызывало статического связывания с библиотеками Boost.Я хочу сгенерировать исполняемый файл, который динамически не зависит от Boost, а только от основных C++ библиотек времени выполнения, чтобы любая другая машина могла запустить его без доставки Boost или каких-либо Boost DLL s.Вполне нормально, если размер файла немного увеличивается.

Добавление следующего определения препроцессора к main.cpp также не работает:

#define BOOST_ALL_NO_LIB 1

Как можноЯ действительно строю автономный исполняемый файл?

1 Ответ

0 голосов
/ 11 декабря 2018

Получается, что я просто ошибочно установил Boost для использования статических библиотек:

set(Boost_USE_STATIC_LIBS ON)

CMake переменные чувствительны к регистру, поэтому написание Boost с заглавными буквами не работает.

Предварительно скомпилированные двоичные файлы Windows уже содержат все необходимое, поэтому компиляция самостоятельно не требуется, если вы просто хотите ссылаться на статические библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...