【问题标题】:C++ file compiling: -L and -I arguments don't work for boost libraryC++ 文件编译:-L 和 -I 参数不适用于 boost 库
【发布时间】:2020-03-26 05:01:34
【问题描述】:

有类似的问题,但他们的答案不适用于我的问题。 我有一个 c++ 程序,上面有 #include <boost/test/unit_test.hpp>(其中包括)。

要正确编译,如果我理解的话,我应该执行以下命令:

g++ -g -L/path_to_boost_lib -lboost_lib myprog.cpp -o myprog.exe

如果我进行定位,我会得到/usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so. 因此,我通过以下方式编辑了对 g++ 的调用:

g++ -g -L/usr/lib/x86_64-linux-gnu -lboost_unit_test_framework myprog.cpp -o myprog.exe

但我仍然收到undefined reference to boost::unit_test 类型的错误。

我也尝试了包含 boost 文件夹的选项-I/usr/include/,但没有成功。

【问题讨论】:

    标签: c++ boost include g++ include-path


    【解决方案1】:

    这是因为顺序。 GCC 链接器从左到右遍历工件,它在目标文件中遇到的每个未知符号都必须由之后发生的工件解析。

    因此正确的命令是:

    g++ -g myprog.cpp -L/usr/lib/x86_64-linux-gnu -lboost_unit_test_framework -o myprog.exe
    

    请参阅this answer 以获得更详尽的说明。

    我建议使用像 CMake 这样的构建工具来为您处理这些低级细节。

    【讨论】:

    • 我一定会看看的,谢谢!选项“-L”和“-I”之间是否有特定的顺序?我认为一切都因提升而被阻止,但似乎我的包含路径也有一些问题......而且我不太明白,因为我的标题中的包含是相对路径,即#include "../../folder1/folder2/otherfile.h,并且这条路径是正确的我要编译的主程序
    • 相对包含不应该依赖于-L,我不确定这里的顺序是否重要,但如果确实如此,-L 肯定必须在-l 之前。如果您对代码中的相关包含有疑问,您应该提出一个新问题。
    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 2021-11-05
    • 2012-02-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多