2011-10-09 86 views
0

我编译了Google C++ Test。我现在试图将它添加到我的g ++安装(在Cygwin上),因此我不必为每个项目指定-I,-L-l。我做的步骤是:G ++:尝试将include和lib添加到默认目录

  1. 我把一个符号链接到/ usr /本地/包括以GTEST_ROOT /包括/ GTEST
  2. 我把在/ usr/local/lib目录中GTEST_ROOT/lib中的库符号链接( libgtest.la libgtest_main.la)
  3. 我写了一个证明程序测试设置

测试程序编译罚款与g++ -c proof.cppg++ 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只是工作。我错过了什么?

感谢马特,我现在明白我不能放弃-lgtest。我想至少摆脱-LGTEST_ROOT/lib/.libs。我已将符号链接添加到提供的其他.a.lai文件中。但是,g++ proof.cpp -lgtest现在给我链接器错误:cannot find -lgtest

注意:symlinking GTEST_ROOT/lib/.libs中的库仍然不会给出所需的结果。

回答

0

您总是需要将-lgtest传递给您的最终编译/链接步骤。 GCC不会在其搜索路径中搜索所有缺失的符号(这将会太昂贵)。

库文件本身(.so.a)需要位于/usr/local/lib/目录中,或者指向这些文件的符号链接。 Symlinking目录不起作用。

好吧,这在技术上并非如此。你可以修改你的spec文件,但不要那样做。

+0

谢谢,马特。我有'libgtest.la'和'libgtest_main.la'(不是目录)的符号链接。根据你的建议,我已经在'.a'和'.lai'文件中添加了符号链接(没有'.so'文件)。所以我期望'g ++ proof.cpp -lgtest'可以工作,但是我得到'找不到-lgtest'错误。有什么建议么? – Carlos

+1

尝试删除所有的符号链接,除了'.a'。 BTW不会gtest有'make install'目标?你不应该亲自做这些事情,make过程应该处理安装部分(并且修复'.la'文件进行安装)。 – Mat

+0

再次感谢,马特。删除除'.a'文件以外的所有内容时不会发生变化。 gtest的'make install'有用地告诉你阅读README,它没有关于如何处理这个库的指令。 – Carlos

0

如果你想对它作出反应,那你总是需要指定这个参数 - 这就是Makefile的用途 - 所以你不需要在每次编译时输入那些长行。如果你愿意,你也可以使用LDFLAGS环境变量来为你存储这些变量,但是你会将它链接到你编译的每个可执行文件 - 这绝对不是一个好主意。