有类似的问题,但他们的答案对我的问题不起作用。
我有一个带有 #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/