我试图使用boost :: filesystem :: exists函数。当我试图链接时,我正在
/usr/local/include/boost/filesystem/operations.hpp:289: undefined reference to `boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)'
错误。
我用Google搜索了一段时间,发现只有" link-with-boost"答案。在我的情况下,为链接器指定了-lboost_system和-lboost_filesystem,但它似乎不起作用。 实际上我可以使用boost :: filesytem :: path(例如),但是当我尝试使用任何需要boost / filesystem.hpp标头的东西时,我会收到链接器错误。 有什么想法吗?
P.S。我使用gcc-4.6.4并从repos安装了boost lib,但我认为gcc-4.6.4是我的ubuntu 12.04的默认gcc版本。我想我不需要从源代码编译boost?
答案 0 :(得分:2)
链接器(ld)有许多选项可指定解析共享库的搜索路径,man ld
将为您提供所有选项。假设您已在/usr/local/lib
中安装了boost,您可以将其中一个选项添加到gcc以传递给链接器:
-L =的/ usr /本地/ lib中
在默认目录之前搜索命令行中指定的目录。无论选项出现的顺序如何,所有-L选项都适用于所有-l选项。 如果searchdir以“=”开头,则“=”将替换为sysroot前缀,即配置链接器时指定的路径。 -L选项仅设置编译时库搜索路径;如果您希望在运行时找到共享库,则必须在运行时知道其目录。
-Wl,-rpath,在/ usr /本地/ lib中
将目录添加到运行时库搜索路径。将ELF可执行文件与共享对象链接时使用此方法。所有-rpath参数都连接在一起并传递给运行时链接程序,后者使用它们在运行时查找共享对象。在定位链接中明确包含的共享对象所需的共享对象时,也会使用-rpath选项;请参阅-rpath-link选项的说明。如果在链接ELF可执行文件时未使用-rpath,则在定义环境变量“LD_RUN_PATH”时将使用该内容。
另一种方法是将LD_LIBRARY_PATH
添加到您的增强库的位置。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
链接器(ld)使用LD_LIBRARY_PATH
作为查找所需共享库的搜索路径之一。
您可以阅读有关链接器和共享库here的更多信息。
要完全理解默认情况下您的安装没有找到增强库的原因,您可能会发现this answer at stackexchange信息丰富。