使用boost二进制文件上的显式位置编译boost标志

时间:2018-06-05 17:28:41

标签: c++ boost

我正在编译一个需要boost::filesystem的项目。我在编译步骤中包含了以下标志:

g++ -Wall -ggdb -Werror -std=c++11 -lboost_system 
    -lboost_filesystem -I /custom/path/to/boost_1_67_0 
    -o build/main build/cp.o build/walk.o build/diff.o build/main.o

我收到错误:

build/cp.o: In function `boost::filesystem::relative(boost::filesystem::path const&, boost::filesystem::path const&)':
/custom/path/boost_1_67_0/boost/filesystem/operations.hpp:690: undefined reference to `boost::filesystem::detail::relative(boost::filesystem::path const&, boost::filesystem::path const&, boost::system::error_code*)'
build/cp.o: In function `boost::filesystem::weakly_canonical(boost::filesystem::path const&)':
/custom/path/boost_1_67_0/boost/filesystem/operations.hpp:728: undefined reference to `boost::filesystem::detail::weakly_canonical(boost::filesystem::path const&, boost::system::error_code*)'
collect2: error: ld returned 1 exit status
make: *** [build] Error 1

我怀疑这是因为我有其他各种boost::filesystem二进制文件,其中一些在其版本中没有relativeweakly_canonical。我真的不知道在哪里提供参数来指定二进制文件的位置。我怀疑它与标志lboost_systemlboost_filesystem有关,我可以在那里提供位置。

我目前正在构建.so,但我可以看到文件系统.so已经在/custom/path/boost_1_67_0/bin.v2/libs/filesystem/build/gcc-4.8.5/release/threading-multi/libboost_filesystem.so.1.67.0成功构建,所以我想指出它的意思时间。建立图书馆需要很长时间。

我可以扩展-lboost_{libname}标志吗?它是-I标志吗?

编辑:既然在构建期间由--prefix指定的二进制位置已经完成,我尝试了同样的事情,即使使用-L也没有用。请参阅下面的LD_LIBRARY_PATH解决方案的答案。

2 个答案:

答案 0 :(得分:0)

我有一个解决方案,但它并不漂亮:

我怀疑是因为$LD_LIBRARY_PATH中指定了另一个boost库二进制文件,我无法使用-L /custom/path/...加载我自己的库。

因此,我做了:

export LD_LIBRARY_PATH=/custom/path/...:$LD_LIBRARY_PATH

它有效。

这绝不是一个好的答案,因为它并没有真正使这个构建过程可以移植到没有LD_LIBRARY_PATH标志的用户。更好的答案将被批准而不是这个。

答案 1 :(得分:0)

看起来你仍然需要提供-L GCC选项。 使用-L告诉编译器在哪里查找boost库。

另外,请确保使用bjam / b2在适当的位置安装boost。 bin.v2目录用于构建boost库而不是安装。