使用Conan和Cmake对Boost Archive的未定义引用

时间:2018-09-22 14:29:00

标签: c++ boost cmake conan

首先,我在根目录中使用以下命令和文件设置了项目:

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。

0 个答案:

没有答案