c++ - Linux 上 codelite、unittest++ 和 g++ 的链接器错误

标签 c++ linker g++ codelite unittest++

我刚开始使用 C++ 进行单元测试,并在 Linux (Mint) 上编写 C++。我使用 CodeLite 作为我的 IDE。我在 stackoverflow 上找到了几个关于链接器错误的答案,但在尝试各种解决方案数小时后,我没有成功地正确实现解决方案。

我通过 apt-get 安装了 unittest++。 unittest++ 头文件安装在/usr/include 中,所以我将其添加到 Codelite 的编译器链接器选项中(右键单击项目名称->设置,编译器): Codelite screenshot

然后我有一个非常简单的程序,它完全由一个 main.cpp 文件组成:

#include <unittest++/UnitTest++.h>
//See if unit tests are working
TEST(MyMath) {
    CHECK(false);
}

int main()
{
    UnitTest::RunAllTests();
    return 0;
}

此时运行项目会产生其他用户遇到过的链接器错误流,例如:

main.cpp:4:对 UnitTest::CurrentTest::Details() 的 undefined reference

在这一点上,我的理解是我现在需要告诉 g++ 编译器关于目标文件并将它们链接到 unittest++ 文件。这就是我被困的地方。我看到的唯一 .o 文件位于 Debug/main.cpp.o 并运行命令
g++ main.cpp -o main.cpp.o -Lunittest++ 以及 I 和 o 标志的变体,但它们都返回与我在尝试编译时遇到的相同的链接器错误。我还尝试复制论坛中的每一行 g++,但只遇到各种错误。

我试图在 g++ 手册页中找到解决方案,阅读了我一直在使用的标志,但没有推断出解决方案。然后我很快就被 man 条目中的大量页面埋没了。 CodeLite 和 unittest++ 的文档似乎已经过时了,所以作为最后的手段,我在 stackoverflow 上发布了这里。

我很确定我只是犯了一个新手错误。如果有人有反馈,我将不胜感激。

最佳答案

在您的解释中,您尝试使用 g++ -c main.cpp -o main.cpp.o -Lunittest++ 手动链接,但是 -L 选项给出了用于搜索库的其他目录的路径。您可能希望 -lunittest++ 链接到 unittest++ 库。该库应提供您在“ undefined reference ”错误中看到的符号。

作为旁注,“/usr/include”应该在默认搜索路径中,无需显式添加。

关于c++ - Linux 上 codelite、unittest++ 和 g++ 的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657198/

相关文章:

c++ - 如何通过套接字发送PDF文件?

c++ - variant<int, string> 可以是 constexpr 吗?

c++ - C++中的共享字符串常量

c++ - 使用 MinGW (Dev-C++) 编译 64 位二进制文​​件

c++ - 将 c++98 代码升级到 c++11

c++ - C++98 中的容器初始化

c++ - 如何使用 find_package 通过 CMake 静态链接到许可的 Qt 库?

dll - 静态链接搜索动态符号(VS 2015)

c++ - 对某些 opencv 函数的 undefined reference

c++ - NS3 - G++ 6.x 关于 c++14 的警告