我正在编译一个需要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
二进制文件,其中一些在其版本中没有relative
和weakly_canonical
。我真的不知道在哪里提供参数来指定二进制文件的位置。我怀疑它与标志lboost_system
和lboost_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
解决方案的答案。
答案 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库而不是安装。