首页 > 解决方案 > 使用柯南和 Cmake 对 Boost 存档的未定义引用

问题描述

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

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,应该链接。

标签: c++boostcmakeconan

解决方案


推荐阅读