试图将include和lib添加到默认目录
G++: Trying to add include and lib to default directory
我已经编译了Google c++测试。我现在正试图将它添加到我的g++安装中(在Cygwin上),这样我就不必为每个项目指定-I
, -L
和-l
。我所做的步骤是:
- 我在/usr/local/include中添加了一个符号链接到GTEST_ROOT/include/gtest
- 我把符号链接在/usr/local/lib到GTEST_ROOT/lib (libgtest. lib)的库。la libgtest_main.la) 我写了一个证明程序来测试设置
测试程序在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环境变量来为您存储这些变量,但是这样您将使它链接到您编译的每个可执行文件—这绝对不是一个好主意。
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 如何将默认代码添加到我在 vim 中打开的每个 cpp 文件?
- 为什么不按默认构造路径划分路径只是在 Visual Studio 中添加尾随分隔符?
- 为什么 CreateWindowEx 会默认添加WS_CAPTION?
- C :在现实世界中添加和重新定义默认参数
- 如何将用户下载的标头文件添加到系统中默认情况下的标题文件列表
- Visual Studio添加真正"global"默认包含路径
- 将错误处理添加到加载数据的函数(但有时还需要使用默认值)
- 将功能添加到默认复制构造函数中
- 如何为cc_library添加默认的 copts,例如 '-fopenmp'?
- 捕获非默认文件夹上的项目添加事件
- C ++多个CIN默认值(如果未输入),则添加到map<string,vector<double>>
- 当使用template_back将元素添加到向量时,如何强制编译器使用默认构造函数
- 将默认标志添加到 CLang++ 或 G++
- 向虚拟方法添加默认参数
- 为什么我们不能重载构造函数来向其添加默认参数
- C++-不能将默认参数添加到类模板成员的越界定义中
- 用于添加默认参数的c++特定语法
- Android CMake build默认添加no-exceptions和no-rtti