【发布时间】:2014-04-18 01:01:55
【问题描述】:
与boost::serialization 链接时,我的项目“发布”版本出现问题。我的“调试”和“发布”版本之间唯一真正的区别是我在调试中定义了DEBUG 并使用-O0,我在发布中定义了NDEBUG 并使用-O3。
我可以在调试模式下完全编译、链接和运行。
但是,当我使用发布模式编译时,它会编译正常但在链接过程中失败并出现以下错误:
/home/jarrett/projects/icebreakers/glr/build/libglr.a(ModelManager.o): In function `serialize<boost::archive::text_iarchive, glr::models::Model>':
/home/jarrett/projects/icebreakers/glr/deps/boost/include/boost/serialization/access.hpp:118: undefined reference to `void glr::models::Model::serialize<boost::archive::text_iarchive>(boost::archive::text_iarchive&, unsigned int)'
/home/jarrett/projects/icebreakers/glr/build/libglr.a(ModelManager.o): In function `serialize<boost::archive::text_oarchive, glr::models::Model>':
/home/jarrett/projects/icebreakers/glr/deps/boost/include/boost/serialization/access.hpp:118: undefined reference to `void glr::models::Model::serialize<boost::archive::text_oarchive>(boost::archive::text_oarchive&, unsigned int)'
/home/jarrett/projects/icebreakers/glr/build/libglr.a(TextureManager.o): In function `serialize<boost::archive::text_iarchive, glr::glw::Texture2D>':
/home/jarrett/projects/icebreakers/glr/deps/boost/include/boost/serialization/access.hpp:118: undefined reference to `void glr::glw::Texture2D::serialize<boost::archive::text_iarchive>(boost::archive::text_iarchive&, unsigned int)'
/home/jarrett/projects/icebreakers/glr/build/libglr.a(TextureManager.o): In function `serialize<boost::archive::text_oarchive, glr::glw::Texture2D>':
/home/jarrett/projects/icebreakers/glr/deps/boost/include/boost/serialization/access.hpp:118: undefined reference to `void glr::glw::Texture2D::serialize<boost::archive::text_oarchive>(boost::archive::text_oarchive&, unsigned int)'
/home/jarrett/projects/icebreakers/glr/build/libglr.a(AnimationManager.o): In function `serialize<boost::archive::text_iarchive, glr::glw::Animation>':
/home/jarrett/projects/icebreakers/glr/deps/boost/include/boost/serialization/access.hpp:118: undefined reference to `void glr::glw::Animation::serialize<boost::archive::text_iarchive>(boost::archive::text_iarchive&, unsigned int)'
/home/jarrett/projects/icebreakers/glr/build/libglr.a(AnimationManager.o): In function `serialize<boost::archive::text_oarchive, glr::glw::Animation>':
/home/jarrett/projects/icebreakers/glr/deps/boost/include/boost/serialization/access.hpp:118: undefined reference to `void glr::glw::Animation::serialize<boost::archive::text_oarchive>(boost::archive::text_oarchive&, unsigned int)'
collect2: error: ld returned 1 exit status
scons: *** [build/darkhorizon] Error 1
scons: building terminated because of errors.
我不明白这一点,因为所讨论的方法已完全定义。我不会在这些类的代码中执行任何类型的#ifdef NDEBUG 等宏。
有人明白为什么会发生这种情况吗?
我的 Texture2D 课程:
Texture2D.hpp
Texture2D.cpp
我的 TextureManager 类:
TextureManager.hpp
TextureManager.cpp
如果有帮助,我很乐意提供更直接/本地化的代码 sn-ps。
更新:如果我将serialize 方法的定义移动到头文件中,它会突然链接!我想这与它们是模板方法有关,但我仍然不明白为什么我的“调试”构建工作但我的“发布”构建却没有......
【问题讨论】:
标签: c++ serialization boost