如何在 Ubuntu 中使用随 apt 安装的 UnitTest++

How to use UnitTest++ installed with apt in Ubuntu

$ sudo apt install libunittest++-dev

之后

$ sudo find / -iname "*UnitTest++.*" 2> /dev/null
/usr/include/UnitTest++/UnitTest++.h
/usr/lib/x86_64-linux-gnu/pkgconfig/UnitTest++.pc
/usr/lib/x86_64-linux-gnu/libUnitTest++.so
/usr/lib/x86_64-linux-gnu/libUnitTest++.so.2
/usr/lib/x86_64-linux-gnu/libUnitTest++.so.2.0.0

但是没有 libUnitTest++.a 我在 Windows 中根据说明 here 自己编译了 UnitTest++。我也没有看到源代码文件。

我可以使用此安装进行测试还是需要下载源代码并自行编译?或者如何使用 libUnitTest++.so 而不是 libUnitTest++.a

这是我的测试之一:

#include "UnitTest++/UnitTest++.h"
#include "skip_list.cpp"
#include <iostream>

using namespace std;

TEST(NodeTest) 
{
    SkipListNode<int> node(15, 2);

    CHECK_EQUAL(15, node.key);
    CHECK_EQUAL(2, node.height);
    CHECK(!node.next[0]);
    CHECK(!node.next[1]);
    CHECK(!node.next[2]);
}

int main(int, const char *[])
{
   return UnitTest::RunAllTests();
}

现在它说:

g++ -std=c++11 -Wall -g  skip_list_test.cpp
/tmp/cc2zCui4.o: In function `TestNodeTest::RunImpl() const':
/home/greg/study/data_structures/02_03_01_skip_list/skip_list_test.cpp:16: undefined reference to `UnitTest::CurrentTest::Details()'

由于没有答案,删除了 UnitTest++ deb-packages:

$ sudo apt remove libunittest++2 libunittest++-dev

克隆了 Git 项目并根据上面的说明进行了编译。现在可以使用了:

g++ -std=c++11 -Wall -g  -c -I/usr/local/include/ skip_list_test.cpp
g++ -std=c++11 -Wall -g  skip_list_test.o /usr/local/lib/libUnitTest++.a -o skip_list_test.out
./skip_list_test.out
Success: 2 tests passed.
Test time: 0.00 seconds.

以及安装的工件:

$ sudo find / -iname "*UnitTest++.*" 2> /dev/null
/usr/local/include/UnitTest++/UnitTest++.h
/usr/local/lib/pkgconfig/UnitTest++.pc
/usr/local/lib/libUnitTest++.a

无论如何欢迎任何其他答案:)

正如您在 中所做的那样,您需要告诉 g++ 包含该库。在那里,您为它提供您自己编译的 libUnitTest++.a 存档文件的完整路径作为输入。

要使用系统包管理器安装的库——在本例中,apt——提供链接器指令会更常见。在这种情况下,-l UnitTest++ 指示链接器 "search my system library paths for libUnitTest++.so"

$ g++ -std=c++11 -Wall -g  skip_list_test.cpp -l UnitTest++ -o skip_list_test.out
$ ./skip_list_test.out
Success: 1 tests passed.
Test time: 0.00 seconds.