G ++:尝试将include和lib添加到默认目录

时间:2011-10-09 18:36:53

标签: c++ linker

我编译了Google C ++ Test。我现在正尝试将它添加到我的g ++安装(在Cygwin上),这样我就不必为每个项目指定-I-L-l。我做的步骤是:

  1. 我在/ usr / local / include中添加了符号链接到GTEST_ROOT / include / gtest
  2. 我将/ usr / local / lib中的符号链接放到GTEST_ROOT / lib中的libs(libgtest.la libgtest_main.la)
  3. 我写了一个测试程序来测试设置
  4. 测试程序使用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中的库进行符号链接仍无法提供所需的结果。

2 个答案:

答案 0 :(得分:0)

您始终需要将-lgtest传递到最终的编译/链接步骤 1 。 GCC不会搜索其搜索路径中的所有库中缺少的符号(这会太昂贵)。

库文件本身(.so.a)需要位于/usr/local/lib/目录中,或者是这些文件的符号链接。对目录进行协同处理将无法正常工作。

1 嗯,这在技术上并不正确。您可以修改您的spec文件,但不要这样做。

答案 1 :(得分:0)

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