试图将include和lib添加到默认目录

G++: Trying to add include and lib to default directory

本文关键字:默认 添加 lib include      更新时间:2023-10-16

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

  1. 我在/usr/local/include中添加了一个符号链接到GTEST_ROOT/include/gtest
  2. 我把符号链接在/usr/local/lib到GTEST_ROOT/lib (libgtest. lib)的库。la libgtest_main.la)
  3. 我写了一个证明程序来测试设置

测试程序在g++ -c proof.cpp下可以正常编译,但g++ proof.cpp在链接时出现错误,说找不到gtest引用

使用grep在GTEST_ROOT中搜索所需的引用,我在GTEST_ROOT/lib/中的其他库中找到了它们。libs (libgtest。libgtest。la libgtest。赖libgtest_main。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/中的库。lib仍然没有给出期望的结果。

您始终需要将-lgtest传递到您的最终编译/链接步骤1。GCC不会在它的搜索路径中搜索所有的库来寻找它缺少的符号(那样代价太大了)。

库文件本身(.so.a)需要在/usr/local/lib/目录中,或者到这些文件的符号链接。

1 这在技术上是不正确的。你可以修改你的规范文件,但是不要这样做。

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