我一直在使用 gtests 对个人项目进行单元测试。上周我升级到了 Linux Mint 的 LTS 版本。不幸的是,在那次事件之后,由于 gtests 链接问题,我无法编译我的项目。
发出以下错误:
/usr/bin/x86_64-linux-gnu-ld: build/tests/policies/roundrobin_tests.o: undefined reference to symbol '_ZN7testing4TestC2Ev'
/home/myuser/Documents/googletest-release-1.8.0/googletest/libgtest.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
我通过CMake 3.10.2生成了libgtest.so和libgtest_main.so。 gtest版本是release-1.8.0,和我之前用的一样。
这些库位于 /usr/lib 中,相应的 include 文件夹也已复制到 /usr/include 中。我确保这个位置在我的 ld 路径中,这不是问题。
我的编译器是 g++ v7.3.0,我用来编译睾丸的命令是:
g++ -std=c++14 -Wall -O3 -Iinclude build/tests/policies/roundrobin_tests.o -lgtest_main -pthread -o bin/policies/roundrobin_tests
我尝试改变命令中元素的顺序,显式添加 -L/usr/lib 和 -I/usr/include ,但没有成功。一个有趣的事实是,如果我去掉 -pthread 标志,错误仍然是相同的。
之前使用过相同的命令,唯一的区别是我现在使用的编译器版本,因为我之前使用过 g++ 5.4.0。关于如何解决这个问题有什么见解吗?
编辑:刚刚使用 g++ 5.4.0 和 CMake 3.5 测试了相同的过程,并且出现了相同的问题。
您缺少链接 lib -lgtest