使用C ++ 11支持选定的库

时间:2017-05-04 05:12:15

标签: c++ c++11 boost

我试图在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_6system1‌​0error_codeE

(升压::文件系统::详细的current_path ::)

0000000000000c90 T _ZN5boost10filesystem6detail12current_pathEPNS_6system10error_codeE

(升压::文件系统::绝对值)

0000000000001100 T _ZN5boost10filesystem8absoluteERKNS0_4pathES3_

0 个答案:

没有答案