我目前正在学习如何在C ++中为程序制作和使用MakeFiles。我已经能够为普通的.cpp类创建和运行Makefile,但是我遇到了测试类的问题。为了测试我在Code :: Blocks中使用Gtest,在“链接器设置”中的Test_A.cpp文件中添加:
/usr/lib/libgtest.a
/usr/lib/libgtest_main.a
对于其他链接器选项我放了“-pthread”。我知道在某种程度上这些库需要添加到makefile中,但我无法弄清楚如何。我原本以为他们需要在第3行添加,但我尝试的所有内容都会返回数千行类型的错误:
undefined reference to `testing::Test::TearDown()
undefined reference to `testing::Test::~Test() etc....
我的makefile:
1. all: Test
2. Test_A.o: Test_A B.h
3. g++ -c Test_A.cpp -o Test_A.o
4. Test: Test_A.o
5. g++ -o Test Test_A.o
6. clean:
7. rm -rf *o *~
答案 0 :(得分:8)
在构建最终二进制文件时,您需要将库名称列表传递给链接器。 LDFLAGS
是Makefile中使用的变量,用于指示传递给链接器的标志列表。
要链接库libabc.a
或libabc.so
,您需要将链接器标记传递为-labc
。
要指定库的位置,您需要使用-L
标志。请注意,除LD_LIBRARY_PATH
中定义的目录外,链接器还会在/etc/ld.so.conf
中的目录中搜索您的库。
虽然-L/usr/lib
在您的情况下是可选的,(因为您的发行版应该已经配置了ld.so.conf来从/usr/lib
获取库),我已经在下面显示它以防万一你想把它改成不同的位置。
LDFLAGS := -lpthread -lgtest -lgtest_main -L/usr/lib
all: Test
Test_A.o: Test_A B.h
g++ -c Test_A.cpp -o Test_A.o
Test: Test_A.o
g++ -o Test Test_A.o $(LDFLAGS)
clean:
rm -rf *o *~
答案 1 :(得分:7)
在链接行添加了库:
g++ -o Test Test_A.o /usr/lib/libgtest.a /usr/lib/libgtest_main.a -lpthread