У меня есть минимальный пример сериализации Boost, где я пытаюсь сохранить целое число в файле двоичного архива.
Вот main. cpp:
#include <iostream>
#include <fstream>
#include <boost/archive/binary_oarchive.hpp>
int main() {
int t = 0;
std::ofstream file("Test.bin");
boost::archive::binary_oarchive archive(file);
archive << t;
file.close();
return 0;
}
и вот Файл CMake:
cmake_minimum_required(VERSION 3.15)
project(Test)
set(CMAKE_CXX_STANDARD 17)
find_package(Boost REQUIRED serialization)
add_executable(Test main.cpp)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(Test ${Boost_LIBRARIES})
endif()
Когда я пытаюсь запустить эту программу в CLion, я получаю большой список неопределенных ссылочных ошибок, как показано здесь: https://pastebin.com/8uX9MZFf
Я установил Boost с помощью диспетчера пакетов vcpkg. Компилирую с помощью Mingw-w64. Файл CMake загружается без ошибок (только предупреждение, в котором говорится: «Новая версия Boost может иметь неправильные или отсутствующие зависимости и импортированные цели», хотя я слышал, что это предупреждение не вызывает беспокойства, поскольку это означает, что текущая версия CMake не не знаю о новейшей версии Boost).
Я пытался найти решения этой проблемы повсюду, но, похоже, я не могу найти здесь ничего, что работает. Любая помощь приветствуется.
Я использую cmake 3.15.3, boost 1.73.0 и mingw-w64 6.0.
EDIT
Я удалил и переустановил Boost без использования диспетчера пакетов и снова попытался получить библиотеку сериализации. В этом контексте CMake сталкивается с ошибками, говоря, что не может найти Boost с сериализацией (хотя он может найти только Boost). Я установил Boost_DEBUG
на ON
, посмотрел на вывод и заметил следующее:
_boost_COMPILER = "-mgw81" (guessed)
Кажется, CMake предполагает, что компилятор, который я использовал для компиляции boost, был mgw81. Я предполагаю, что он получил 8.1 из моей версии g cc, что верно.
Searching for SERIALIZATION_LIBRARY_RELEASE: boost_serialization-mgw81-mt-x64-1_73;boost_serialization-mgw81-mt-x64;...
В результате выбора компилятора он ищет файл с " -mgw81 "в имени. Проблема в том, что файлы библиотеки, созданные при создании ускорения, называются так:
libboost_serialization-mgw8-mt-x64-1_73.a
Здесь написано «-mgw8» вместо «-mgw81». Я не знаю, как исправить CMake или построить Boost таким образом, чтобы этого конфликта не было. Я пробовал перестроить boost с помощью toolset=gcc-8.1
вместо toolset=gcc
, но я все еще получаю «-mgw8» в именах файлов библиотеки.
EDIT 2
Я нашел решение вышеуказанной проблемы. Я разместил это ниже.