C++ 在boost二进制文件上编译具有显式位置的boost标志

C++ 在boost二进制文件上编译具有显式位置的boost标志,c++,boost,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 func

我正在编译一个需要
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
二进制文件,其中一些在其版本中没有
相对的
弱规范的
。我也不知道在哪里提供参数来指定二进制文件的位置。我怀疑这与我可以提供位置的标志
lboost\u系统
lboost\u文件系统
有关

我目前正在构建.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\u LIBRARY\u路径
解决方案,请参考我下面的答案。

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

我怀疑这是因为另一个boost库二进制文件是在
$LD\u library\u PATH
中指定的,我无法使用
-L/custom/PATH/…
优先加载我自己的库

因此,我做到了:

export LD_LIBRARY_PATH=/custom/path/...:$LD_LIBRARY_PATH
它是有效的


这绝不是一个好的答案,因为如果没有
LD\u LIBRARY\u PATH
标志,它就不能真正让这个构建过程可移植给用户。更好的答案将被批准,而不是此选项。

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

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