首先,我在根目录中使用以下命令和文件设置了项目:
conan install ./ && cmake CMakeList.txt
conanfile.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。