我想在测试文件中使用UnitTest ++库。但是,我很难在编译时将库包含在内。所以这是我目前的目录结构:
tests/
UnitTests++/
libUnitTest++.a
src/
UnitTests++.h
unit/
test.cpp
我刚刚使用了UnitTest ++ getting started指南来获取库设置。这是test.cpp:
// test.cpp
#include <UnitTest++.h>
TEST(FailSpectacularly)
{
CHECK(false);
}
int main()
{
return UnitTest::RunAllTests();
}
我目前正在尝试编译:
gcc -lUnitTest++ -L../UnitTest++/ -I../UnitTest++/src/ test.cpp
我目前最终获得了ld: symbol(s) not found
的一堆输出。那么在编译这个程序时,如何才能正确地包含UnitTest ++库?我在Mac上,我也希望Linux机器上的人能够轻松地运行这些相同的测试。
哇,我希望这能提供足够的信息,如果没有,请告诉我。
答案 0 :(得分:1)
编译test.cpp以获取test.o
并使用
g ++ test.o libUnitTest ++。a -o ./exectest
获取./exectest可执行文件
libUnitTest ++。a只是UnitTest ++所有目标文件的存档。您只需要链接所有目标文件(您的测试对象文件+ libUnitTest ++。a)
尝试编辑unittest ++附带的makefile,使其适合您的情况
答案 1 :(得分:1)
我能够以下列方式构建它
gcc -L../UnitTest++/ -I../UnitTest++/src/ test.cpp -lUnitTest++ -lstdc++
或
g++ -L../UnitTest++/ -I../UnitTest++/src/ test.cpp -lUnitTest++
自动链接到libstdc ++。
GCC文件说:
-llibrary
-l library
链接时搜索名为library的库。 (将库作为单独参数的第二种方法仅适用于POSIX,不建议使用。)
在您编写此选项的命令中,它会有所不同;链接器按照指定的顺序搜索和处理库和目标文件。
因此,在文件foo.o之后但在bar.o之前
foo.o -lz bar.o' searches library
z'。如果bar.o引用“z”中的函数,则可能无法加载这些函数。
我猜这就是为什么在你第一次指定-lUnitTest ++然后test.cpp
时找不到库符号的原因答案 2 :(得分:0)
消息ld: symbol(s) not found
表示您尚未编译库。所以你需要进入UnitTest ++文件夹,编译并安装它。
我从来没有在MAC上工作过,但在linux中,库通常用以下代码编译和安装:
./configure
make
make install
在你发布的UnitTest ++链接中,你应该简单地说:
make install
然后,您将在操作系统的libraries文件夹中拥有UnitTest ++。so库。现在可以使用-lUnitTest ++命令将库链接到您的程序。
答案 3 :(得分:0)
通常你必须在需要它的-lsomething之前放置-Lsomething。