我编译了Google C ++ Test。我现在正尝试将它添加到我的g ++安装(在Cygwin上),这样我就不必为每个项目指定-I
,-L
和-l
。我做的步骤是:
测试程序使用g++ -c proof.cpp
编译正常,但g++ proof.cpp
在链接期间出错,说无法找到gtest引用。
使用grep搜索我的GTEST_ROOT以获取所需的引用,我在GTEST_ROOT / lib / .libs(libgtest.a libgtest.la libgtest.lai libgtest_main.a libgtest_main.la libgtest_main.lai)中的其他库中找到它们
由于时间限制,我使用以下命令g++ -LGTEST_ROOT/lib/.libs -lgtest proof.cpp
让它工作,我把它放在一个makefile中。
但是,我仍然试图让我的设置g++ proof.cpp
正常工作。我错过了什么?
感谢Matt,我现在明白我不能放弃-lgtest
。我想至少摆脱-LGTEST_ROOT/lib/.libs
。我已将符号链接添加到提供的其他.a
和.lai
文件中。但是,g++ proof.cpp -lgtest
现在给了我链接器错误:cannot find -lgtest
注意:对GTEST_ROOT / lib / .libs中的库进行符号链接仍无法提供所需的结果。
答案 0 :(得分:0)
您始终需要将-lgtest
传递到最终的编译/链接步骤 1 。 GCC不会搜索其搜索路径中的所有库中缺少的符号(这会太昂贵)。
库文件本身(.so
或.a
)需要位于/usr/local/lib/
目录中,或者是这些文件的符号链接。对目录进行协同处理将无法正常工作。
1 嗯,这在技术上并不正确。您可以修改您的spec文件,但不要这样做。
答案 1 :(得分:0)
如果你想对它起作用,你总是需要指定这个参数 - 这就是Makefile的用途 - 所以你不需要在每次编译时输入那些长行。如果你想要你也可以使用LDFLAGS环境变量来存储这些变量,但是你会将它链接到你编译的每个可执行文件 - 这绝对不是一个好主意。