我试图在Linux上构建boost(1.65),支持C ++ 11以链接我的其他项目(也使用C ++ 11支持编译)。
然而,我遇到了这种错误(这似乎发生了,因为我的提升不是用c ++ 11编译的):
undefined reference to `boost::filesystem::detail::current_path(boost::system::error_code*)'
data_parser.cc:(.text+0xf15): undefined reference to `boost::filesystem::absolute(boost::filesystem::path const&, boost::filesystem::path const&)'
data_parser.cc:(.text+0x142e): undefined reference to `boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)'
data_parser.cc:(.text+0x1790): undefined reference to `boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)'
这是我的命令行:
./b2 --prefix=boost-install --with-filesystem --with-system --with-program_options --with-thread link=static variant=release cxxflags='-std=c++11' install
但是我在编译期间注意到如果我编译时没有任何--with-(所以对所有库都这样),我可以看到这一行:
- C++11 mutex : yes
以及与c ++ 11相关的其他一些行,但是只要我添加--with-(例如--with-thread),相对于c ++ 11的所有行都会消失。
我还尝试在#define BOOST_NO_CXX11_SCOPED_ENUMS
周围添加#include <boost/filesystem.hpp>
,但它并没有改变任何内容。
如果有人可以帮助我,我不知道这里发生了什么。
谢谢。
更新:以下是链接命令的命令:
/usr/bin/c++ -std=c++11 -O3 -DNDEBUG CMakeFiles/MyProject.dir/MyProject.cc.o -o MyProject -L/home/whiteshadow/code/MyProject-build/deps/boost-install/lib -L/home/whiteshadow/code/MyProject-build/deps/zlib-install/lib -L/home/whiteshadow/code/MyProject-build/deps/nifticlib-install/lib -Wl,-rpath,/home/whiteshadow/code/MyProject-build/deps/boost-install/lib:/home/whiteshadow/code/MyProject-build/deps/zlib-install/lib:/home/whiteshadow/code/MyProject-build/deps/nifticlib-install/lib: -rdynamic ../deps/zlib-install/lib/libz.a ../deps/nifticlib-install/lib/libznz.a ../deps/nifticlib-install/lib/libnifticdf.a ../deps/nifticlib-install/lib/libniftiio.a -lboost_filesystem -lboost_system -lboost_thread -lboost_program_options DataStructure/libDataStructure.a FileHandler/libFileHandler.a Parser/libParser.a Tools/libTools.a -lpthread FileHandler/libFileHandler.a FileHandler/libFileHandler.a Tools/libTools.a DataStructure/libDataStructure.a
我认为它不是来自错误链接问题,因为如果删除-lboost_filesystem,我会发现更多链接错误。这里我只有7个,仅涉及3个函数(boost :: filesystem :: detail :: status,boost :: filesystem :: detail :: current_path和boost :: filesystem :: absolute)。
此外,在libboost_filesystem.a中,我能够找到这三个函数的符号:
(升压::文件系统::详细::状态)
00000000000026d0 T _ZN5boost10filesystem6detail6statusERKNS0_4pathEPNS_6system10error_codeE
(升压::文件系统::详细的current_path ::)
0000000000000c90 T _ZN5boost10filesystem6detail12current_pathEPNS_6system10error_codeE
(升压::文件系统::绝对值)
0000000000001100 T _ZN5boost10filesystem8absoluteERKNS0_4pathES3_