关于ZAKER 融媒体解决方案 合作 加入

c- 在 Ubuntu 13.04 上链接 boost :: filesystem

CocoaChina 10-13

我正在尝试在 Ubuntu 13.04 上链接一个项目到 boost:filesystem, 并且在最后阶段遇到了一些奇怪的链接错误 .

构建配置通过 cmake 完成:

find_package ( Boost COMPONENTS system filesystem program_options REQUIRED ) include_directories ( ${Boost_INCLUDE_DIR} ) link_directories ( ${Boost_LIBRARY_DIR} ) target_link_libraries ( ${YARS_TARGET} yarsLib GLEW GL GLU glut m dl xerces-c ode ${Boost_LIBRARIES} )

我尝试使用其他 Boost 版本 . 对于 1.49 和 1.53, 我的行为相同 .

在 Ubuntu 12.04 上 , 它可以正常工作 , 而在运行带有 boost 1.53 的 Archlinux 的开发机器上 , 它可以编译 , 链接和运行 .

/usr/bin/g++ -O3 CMakeFiles/yars.dir/yarsMain.o -o ../bin/yars -L/home/vagrant/local/lib -rdynamic ../lib/libyarsLib.a -lGLEW -lGL -lGLU -lglut -lm -ldl -lxerces-c -lode -lboost_system -lboost_filesystem -lboost_program_options ../lib/libsensorLib.a ../lib/libenvironmentLib.a ../lib/libutilLib.a ../lib/libutilFilterLib.a ../lib/libutilFormatLib.a ../lib/libutilFunctionGeneratorLib.a ../lib/libutilIoLib.a ../lib/libutilMathLib.a ../lib/libutilDefineLib.a ../lib/libdescriptionLib.a ../lib/libfilterDescriptionLib.a ../lib/libfunctionGeneratorDescriptionLib.a ../lib/libfunctionGeneratorDescriptionUtilLib.a ../lib/libbioDescriptionLib.a ../lib/libsensorsDescriptionLib.a ../lib/libyarsDirectoriesModel.a -Wl,-rpath,/home/vagrant/local/lib: ../lib/libutilIoLib.a ( FileSystemOperations.o ) :In function `FileSystemOperations::doesDirExist ( boost::filesystem::path ) ': FileSystemOperations.cpp: ( .text+0x27 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x3a ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' ../lib/libutilIoLib.a ( FileSystemOperations.o ) : In function `FileSystemOperations::doesFileExist ( boost::filesystem::path ) ': FileSystemOperations.cpp: ( .text+0x67 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x7a ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' ../lib/libutilIoLib.a ( FileSystemOperations.o ) : In function `FileSystemOperations::doesDirExist ( std::string* ) ': FileSystemOperations.cpp: ( .text+0xca ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' ../lib/libutilIoLib.a ( FileSystemOperations.o ) :FileSystemOperations.cpp: ( .text+0xdf ) : more undefined references to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' follow ../lib/libutilIoLib.a ( FileSystemOperations.o ) : In function `FileSystemOperations::getFirstExistingDirContainingDir ( std::vector<std::string, std::allocator<std::string> >, std::string* ) ': FileSystemOperations.cpp: ( .text+0x2c3 ) : undefined reference to `boost::filesystem::path::root_directory ( ) const' FileSystemOperations.cpp: ( .text+0x35e ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x373 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x403 ) : undefined reference to `boost::filesystem::path::operator/= ( boost::filesystem::path const& ) ' FileSystemOperations.cpp: ( .text+0x43b ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x453 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x50d ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x564 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' ../lib/libutilIoLib.a ( FileSystemOperations.o ) : In function `FileSystemOperations::getFirstExistingDirContainingFile ( std::vector<std::string, std::allocator<std::string> >, std::string* ) ': FileSystemOperations.cpp: ( .text+0x7e3 ) : undefined reference to `boost::filesystem::path::root_directory ( ) const' FileSystemOperations.cpp: ( .text+0x87e ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x893 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x923 ) : undefined reference to `boost::filesystem::path::operator/= ( boost::filesystem::path const& ) ' FileSystemOperations.cpp: ( .text+0x95b ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x973 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0xa2d ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0xa84 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' ../lib/libutilIoLib.a ( FileSystemOperations.o ) : In function `FileSystemOperations::getFirstExistingDir ( std::vector<std::string, std::allocator<std::string> > ) ': FileSystemOperations.cpp: ( .text+0xd53 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' ../lib/libutilIoLib.a ( FileSystemOperations.o ) :FileSystemOperations.cpp: ( .text+0xd68 ) : more undefined references to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' follow ../lib/libutilIoLib.a ( FileSystemOperations.o ) : In function `FileSystemOperations::checkValidPath ( std::string*, bool, bool, std::string ) ': FileSystemOperations.cpp: ( .text+0x1100 ) : undefined reference to `boost::filesystem::detail::initial_path ( boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x1124 ) : undefined reference to `boost::filesystem::path::operator/= ( boost::filesystem::path const& ) ' FileSystemOperations.cpp: ( .text+0x11e9 ) : undefined reference to `boost::filesystem::path::root_directory ( ) const' FileSystemOperations.cpp: ( .text+0x1237 ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x130a ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x131f ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x137b ) : undefined reference to `boost::filesystem::detail::system_complete ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x13dc ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' ../lib/libutilIoLib.a ( FileSystemOperations.o ) : In function `FileSystemOperations::checkValidPathFromAlternatives ( std::string*, std::string*, std::vector<std::string, std::allocator<std::string> >*, bool, std::string ) ': FileSystemOperations.cpp: ( .text+0x1635 ) : undefined reference to `boost::filesystem::path::root_directory ( ) const' FileSystemOperations.cpp: ( .text+0x1699 ) : undefined reference to `boost::filesystem::path::operator/= ( boost::filesystem::path const& ) ' FileSystemOperations.cpp: ( .text+0x16d0 ) : undefined reference to `boost::filesystem::detail::system_complete ( boost::filesystem::path const&, boost::system::error_code* ) ' FileSystemOperations.cpp: ( .text+0x173f ) : undefined reference to `boost::filesystem::detail::status ( boost::filesystem::path const&, boost::system::error_code* ) ' collect2: error: ld returned 1 exit status

只是一个建议:

1 ) 检查您的 Boost 库是否包含必需的符号 , 您可以使用如下代码:

nm -D /usr/lib64/libboost_filesystem.so.1.52.0 | grep 详细信息 | c 过滤 | grep 你的名字

2 ) 尝试更改链接库的顺序 , 例如将 -lboost_bla-bla-bla 放在命令行末尾 , 然后再次使用 g 运行此命令 , 而不使用 make 或其他东西 , 只需复制粘贴命令并对其进行实验 .

以上内容由"CocoaChina"上传发布 查看原文
相关标签 ubuntu链接末尾

觉得文章不错,微信扫描分享好友

扫码分享