【发布时间】:2013-12-20 03:49:53
【问题描述】:
在我们的主项目中,构建管理被推迟到 CMake。对于我们的不同依赖项,包括 Boost::System,一切都很好,但是我们无法让它编译这个最小的 Boost::Serialization 示例。
CMake 文件
# Untested with previous versions, yet should work
cmake_minimum_required(VERSION 2.8.11)
project(SerialCmake)
# Boost dependency
set(BOOST_ROOT CACHE PATH "Path to Boost library")
find_package(Boost 1.55 COMPONENTS serialization system)
# Create the target
add_executable(${PROJECT_NAME} main.cpp)
include_directories(${Boost_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME}
${Boost_LIBRARIES})
CPP 主文件
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
class Serializable
{
friend class boost::serialization::access;
public:
Serializable(int a): a(a)
{}
private:
template <class Archive>
inline void serialize (Archive &ar, const unsigned int version)
{
ar & a;
}
int a;
};
int main(int argc, char **argv)
{
Serializable s1(1);
// Save
{
std::ofstream ofs(argv[1]);
boost::archive::text_oarchive oa(ofs);
oa << s1;
}
return 0;
}
更多信息
我们的版本:
- XCode 5.0.2
- CMake 2.8-12
- 提升 1.55
- OSX 10.8
编辑:
实际上找到了 CMake 中列出的两个 Boost 库(它们在 CMake 输出中列出)。
第一次使用默认参数构建了 Boost,第二次按照 this post 中的说明构建了 Boost。两个版本的错误相同。 (实际上,我认为这两个版本都很好,因为在非 CMake 项目中使用这些库,通过将它们添加到 XCode 中,如同一篇文章中所述,确实有效。)
问题
我们收到几个(未定义的符号)链接器错误:
架构 x86_64 的未定义符号:
“升压::存档::text_oarchive_impl::save(std::string const&)”,引用自: void boost::archive::save_access::save_primitive(boost::archive::text_oarchive&, std::string const&) 在 main.o
“boost::archive::text_oarchive_impl::text_oarchive_impl(std::ostream&, unsigned int)”,引用自: boost::archive::text_oarchive::text_oarchive(std::ostream&, unsigned int) in main.o
“boost::archive::basic_text_oprimitive::~basic_text_oprimitive()”, 参考自: boost::archive::text_oarchive_impl::~text_oarchive_impl() 在 main.old 中:未找到架构 x86_64 的符号
任何方向?(如您所见,我们要求将应用程序与 Boost::Serialization 和 Boost::System 链接)。
【问题讨论】:
标签: c++ linker cmake xcode5 boost-serialization