如何在 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.
$ 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.