【发布时间】:2016-01-19 10:49:59
【问题描述】:
我正在尝试为我的项目安装一个 C++ 库 (gtkmm),并使用一个简单的测试文件(来自维基百科关于 gtkmm 的主要页面)来测试这个安装。
我做了brew install gtkmm3,它安装了它,但是当我用clang++ -Wall -Werror -Wextra -o test test.cpp 编译时,它找不到我的头文件:
test.cpp:15:10: fatal error: 'gtkmm-3.0/gtkmm.h' file not found
#include <gtkmm-3.0/gtkmm.h>
标头位于~/homebrew/include/gtkmm-3.0/gtkmm.h。
我试过了:
将
$HOME"/homebrew/include"添加到$PATH并在我的源文件中使用#include <gtkmm-3.0/gtkmm.h>。将
$HOME"/homebrew/include/gtkmm-3.0"添加到我的$PATH并在我的源文件中使用#include <gtkmm.h>。
但我还是编译不出来。
我该怎么办?
【问题讨论】:
-
$PATH不被编译器用来查找头文件,它被 shell 用来查找您尝试运行的程序。而是使用编译器的-I </path/to/headers>选项。您可能还需要使用-L提供库的路径,并使用-l告诉它链接该库。 -
没错,现在它找到了。但是它现在找到的标头本身需要一个未找到的其他标头。 (虽然安装了依赖项),我是否必须添加 -I 和 -L 才能手动添加每个依赖项?难道没有办法通过修改环境变量来安装库,用brew来编译而不添加这些选项吗?
-
当你安装时没有提到他们是
keg-only。这意味着它们已安装但未放置在标准位置(因为自动执行此操作存在问题)。因为它们不在标准位置,编译器找不到它们。您必须手动指示位置或查找brew link --force -
@LokiAstari 我安装它时什么都没有。我去看看
brew link --force。 -
我刚试过,它安装在这里:
ls /usr/local/include/gdkmm-3.0/gdkmm.h