首先,我在根目录下使用以下命令和文件设置我的项目:
conan install ./ && cmake CMakeList.txt
柯南文件.txt
[generators]
cmake
[requires]
boost/1.68.0@conan/stable
[options]
boost:shared=True
[imports]
CmakeList.txt
cmake_minimum_required(VERSION 3.10)
project(app CXX)
include(conanbuildinfo.cmake)
conan_basic_setup()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
add_definitions("-std=c++11")
add_executable(app src/main.cpp)
target_link_libraries(app ${CONAN_LIBS})
在我尝试使用make
. 这是我的 main.cpp
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/string.hpp>
int main(int ac, char *args[]) {
std::ofstream ofs("test");
boost::archive::text_oarchive writer(ofs);
}
编译时,我得到一个未定义的引用:
CMakeFiles/app.dir/src/main.cpp.o : in function « void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(boost::archive::text_oarchive&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) » :
main.cpp:(.text._ZN5boost7archive11save_access14save_primitiveINS0_13text_oarchiveENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRT_RKT0_[_ZN5boost7archive11save_access14save_primitiveINS0_13text_oarchiveENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRT_RKT0_]+0x2b) : undefined reference to « boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) »
collect2: error: ld returned 1 exit status
我不知道这个错误的来源.. 编译器?图书馆链接?这很奇怪,因为我可以使用 boost 的其他功能,它不仅仅适用于 boost 序列化......
/!\这不是重复的,目的是了解柯南为什么不链接Boost.Serialization,应该链接。