0
$ 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 中根据此处的说明自己编译 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()'
4

2 回答 2

1

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

要使用系统包管理器安装的库——在这种情况下apt——提供链接器指令会更常见。在这种情况下,-l UnitTest++指示链接器“在我的系统库路径中搜索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.
于 2020-04-10T17:18:53.040 回答
0

由于没有答案,删除了 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

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

于 2020-04-10T06:38:46.483 回答