2

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

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

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

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

我相当肯定我只是犯了一个菜鸟错误。如果有人有反馈,我将不胜感激。

4

1 回答 1

1

在您的解释中,您尝试手动链接g++ -c main.cpp -o main.cpp.o -Lunittest++,但该-L选项提供了其他目录的路径以搜索库。您可能想-lunittest++与 unittest++ 库链接。该库应提供您在“未定义引用”错误中看到的符号。

附带说明一下,“/usr/include”应该在默认搜索路径中,无需显式添加。

于 2017-03-07T21:09:41.040 回答