Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost::filesystem时无法链接_C++_Linux_Boost_Boost Filesystem - Fatal编程技术网

C++ 使用boost::filesystem时无法链接

C++ 使用boost::filesystem时无法链接,c++,linux,boost,boost-filesystem,C++,Linux,Boost,Boost Filesystem,我正在尝试使用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*)' 错误 我在谷歌上搜索了一会儿,只找到了“与boo

我正在尝试使用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*)'
错误

我在谷歌上搜索了一会儿,只找到了“与boost链接”的答案。在我的例子中,为链接器指定了-lboost_系统和-lboost_文件系统,但它似乎不起作用。 实际上,我可以使用boost::filesytem::path(例如),但是当我尝试使用任何需要boost/filesystem.hpp头的东西时,我会遇到链接器错误。 有什么想法吗


另外,我使用的是从repos安装的gcc-4.6.4和boost-lib,但我认为gcc-4.6.4是我的ubuntu 12.04的默认gcc版本。我想我不需要从源代码编译boost?

链接器(ld)有许多选项可以指定解析共享库的搜索路径,
man-ld
将为您提供所有选项。假设您在
/usr/local/lib
中安装了boost,您可以将以下选项之一添加到gcc以传递给链接器:

  • -L=/usr/local/lib

    在命令行上指定的目录在默认目录之前搜索。All-L选项适用于All-L选项,无论选项的显示顺序如何。 如果searchdir以“=”开头,则“=”将替换为sysroot前缀,即配置链接器时指定的路径。L选项仅设置编译时库搜索路径;如果希望在运行时找到共享库,则必须在运行时知道其目录

  • -Wl,-rpath,/usr/local/lib

    将目录添加到运行库搜索路径。这在将ELF可执行文件与共享对象链接时使用。将所有-rpath参数连接起来并传递给运行时链接器,运行时链接器使用它们在运行时定位共享对象。当定位链接中显式包含的共享对象所需的共享对象时,也使用-rpath选项;请参见-rpath链接选项的说明。如果在链接ELF可执行文件时未使用-rpath,则将使用环境变量“LD_RUN_PATH”的内容(如果已定义)

另一种选择是将boost库的位置添加到
LD_LIBRARY_路径中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
链接器(ld)使用
ld_LIBRARY_PATH
作为查找所需共享库的搜索路径之一

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
您可以阅读有关链接器和共享库的更多信息

要完全理解您的安装在默认情况下找不到boost库的原因,您可能会发现一些有用的信息


这建议使用。

链接器(ld)有许多选项可以指定解析共享库的搜索路径,
man-ld
将为您提供所有选项。假设您在
/usr/local/lib
中安装了boost,您可以将以下选项之一添加到gcc以传递给链接器:

  • -L=/usr/local/lib

    在命令行上指定的目录在默认目录之前搜索。All-L选项适用于All-L选项,无论选项的显示顺序如何。 如果searchdir以“=”开头,则“=”将替换为sysroot前缀,即配置链接器时指定的路径。L选项仅设置编译时库搜索路径;如果希望在运行时找到共享库,则必须在运行时知道其目录

  • -Wl,-rpath,/usr/local/lib

    将目录添加到运行库搜索路径。这在将ELF可执行文件与共享对象链接时使用。将所有-rpath参数连接起来并传递给运行时链接器,运行时链接器使用它们在运行时定位共享对象。当定位链接中显式包含的共享对象所需的共享对象时,也使用-rpath选项;请参见-rpath链接选项的说明。如果在链接ELF可执行文件时未使用-rpath,则将使用环境变量“LD_RUN_PATH”的内容(如果已定义)

另一种选择是将boost库的位置添加到
LD_LIBRARY_路径中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
链接器(ld)使用
ld_LIBRARY_PATH
作为查找所需共享库的搜索路径之一

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
您可以阅读有关链接器和共享库的更多信息

要完全理解您的安装在默认情况下找不到boost库的原因,您可能会发现一些有用的信息


这建议使用。

谢谢你,amdn。你让我找到了解决办法。我的系统中有两组boost库文件:/usr/lib和/usr/local/lib。默认情况下使用/usr/lib。所以对我有效的是指定-L/usr/local/lib链接器选项。请根据我的评论编辑你的答案,这样我就可以接受了。@Farrel很高兴我的答案很有帮助。。。我不确定您希望我如何包含对您有效的解决方案。。。这是另一种选择,还是您建议我删除对LD_LIBRARY_PATH的引用?只需将此解决方案添加到您的答案中,我会将该线程标记为已回答。我认为LD_LIBRARY_PATH是解决这个问题的更真实的方法。但对于那些只需要快速修复的人来说-L选项会起作用(我只是尝试使用你的methid,但对我来说不起作用:也许我安装boot的方式不对。我只是没有足够的时间来处理它。)。谢谢你,amdn。你让我找到了解决办法。我的系统中有两组boost库文件:/usr/lib和/usr/local/lib。默认情况下使用/usr/lib。所以对我有效的是指定-L/usr/local/lib链接器选项。请根据我的评论编辑你的答案,这样我就可以接受了。@Farrel很高兴我的答案很有帮助。。。我不确定您希望我如何包含对您有效的解决方案。。。这是另一种选择,还是您建议我删除对LD_LIBRARY_PATH的引用?只需将此解决方案添加到您的答案中,我会将该线程标记为已回答。我认为LD_LIBRARY_PATH是解决这个问题的更真实的方法。但对于那些只需要快速修复的人-我选择