c++ - 使用柯南和 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,应该链接。
解决方案
推荐阅读
- javascript - window.XMLHttpRequest 的含义?(阿贾克斯)
- docker - 无法创建目录“/home/jenkins/.m2”:权限被拒绝
- javascript - 为什么我们可以在浏览器中使用全局变量?
- ant - Ant junitlauncher 任务不运行测试
- ajax - 在 laravel 中使用 ajax 调用并获取 document.execCommand("copy") 但它不起作用
- laravel - 如何将数据从部分页面传递到主要的 laravel 母版页?
- mysql - 从满足的状态和数据库查询中的 id 获取间隔 1 天的日期
- mysql - 为什么查询中没有提到任何命名列时会出现新列错误?
- java - 如何检查类型化类的类型
- mysql - 需要在不同的域中部署相同的 Codeigniter 代码,但使用不同的数据库