C++文件编译: -L and -I arguments don't work for boost library

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

有类似的问题,但他们的答案对我的问题不起作用。 我有一个带有 #include <boost/test/unit_test.hpp> 的 C++ 程序在顶部(包括其他在内)。

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

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 类型的错误.

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

最佳答案

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

因此正确的命令是:

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

参见 this answer以获得更详尽的解释。

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

关于C++文件编译: -L and -I arguments don't work for boost library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59124409/

相关文章:

c++ - 当父类(super class)持有指向 X 的指针,子类持有 Y : X

c++ - 构造函数不能采用非常量引用

c++ - 如何使用 boost::python 将 std::pair 公开给 python?

c - 如何告诉 gcc 在头文件的包含文件夹中查找?

c++ - 带有类模板 typedef 参数的函数模板

c++ - 指向字符串中的单个字符

c++ - 设置项目根?

include - Yii导入或包含

c++ - Linux 将连续输出作为命令行参数传递

c++ - 绑定(bind)到成员变量