【问题标题】:installing C++ library with homebrew使用自制软件安装 C++ 库
【发布时间】: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 &lt;gtkmm-3.0/gtkmm.h&gt;

  • $HOME"/homebrew/include/gtkmm-3.0" 添加到我的$PATH 并在我的源文件中使用#include &lt;gtkmm.h&gt;

但我还是编译不出来。

我该怎么办?

【问题讨论】:

  • $PATH 不被编译器用来查找头文件,它被 shell 用来查找您尝试运行的程序。而是使用编译器的-I &lt;/path/to/headers&gt; 选项。您可能还需要使用 -L 提供库的路径,并使用 -l 告诉它链接该库。
  • 没错,现在它找到了。但是它现在找到的标头本身需要一个未找到的其他标头。 (虽然安装了依赖项),我是否必须添加 -I 和 -L 才能手动添加每个依赖项?难道没有办法通过修改环境变量来安装库,用brew来编译而不添加这些选项吗?
  • 当你安装时没有提到他们是keg-only。这意味着它们已安装但未放置在标准位置(因为自动执行此操作存在问题)。因为它们不在标准位置,编译器找不到它们。您必须手动指示位置或查找brew link --force
  • @LokiAstari 我安装它时什么都没有。我去看看brew link --force
  • 我刚试过,它安装在这里:ls /usr/local/include/gdkmm-3.0/gdkmm.h

标签: c++ macos homebrew


【解决方案1】:

是的,像这样使用pkgconfig,它会告诉你所有的包含路径和你需要的链接路径:

pkg-config --libs --cflags /usr/local/Cellar/gtkmm3/*/lib/pkgconfig/gdkmm-3.0.pc

输出

-D_REENTRANT -I/usr/local/Cellar/gtkmm3/3.18.0/include/gdkmm-3.0 
-I/usr/local/Cellar/gtkmm3/3.18.0/lib/gdkmm-3.0/include 
-I/usr/local/Cellar/glibmm/2.46.3/include/giomm-2.4 
-I/usr/local/Cellar/glibmm/2.46.3/lib/giomm-2.4/include 
-I/usr/local/Cellar/pangomm/2.38.1/include/pangomm-1.4 
-I/usr/local/Cellar/pangomm/2.38.1/lib/pangomm-1.4/include 
-I/usr/local/Cellar/glibmm/2.46.3/include/glibmm-2.4 
-I/usr/local/Cellar/glibmm/2.46.3/lib/glibmm-2.4/include 
-I/usr/local/Cellar/gtk+3/3.18.6/include/gtk-3.0 
-I/usr/local/Cellar/glib/2.46.2/include/gio-unix-2.0/ 
-I/usr/local/Cellar/cairo/1.14.6/include/cairo  
-I/usr/local/Cellar/libepoxy/1.3.1/include 
-I/usr/local/Cellar/pango/1.38.1/include/pango-1.0 
-I/usr/local/Cellar/harfbuzz/1.1.3/include/harfbuzz 
-I/usr/local/Cellar/pango/1.38.1/include/pango-1.0 
-I/usr/local/Cellar/atk/2.18.0/include/atk-1.0 
-I/usr/local/Cellar/cairo/1.14.6/include/cairo 
-I/usr/local/Cellar/cairomm/1.12.0/include/cairomm-1.0 
-I/usr/local/Cellar/cairomm/1.12.0/lib/cairomm-1.0/include 
-I/usr/local/Cellar/cairo/1.14.6/include/cairo 
-I/usr/local/Cellar/pixman/0.32.8/include/pixman-1 
-I/usr/local/Cellar/fontconfig/2.11.1/include 
-I/usr/local/Cellar/freetype/2.6_1/include/freetype2 
-I/usr/local/Cellar/libpng/1.6.20/include/libpng16 
-I/usr/local/Cellar/libsigc++/2.6.2/include/sigc++-2.0 
-I/usr/local/Cellar/libsigc++/2.6.2/lib/sigc++-2.0/include 
-I/usr/local/Cellar/gdk-pixbuf/2.32.3/include/gdk-pixbuf-2.0 
-I/usr/local/Cellar/libpng/1.6.20/include/libpng16 
-I/usr/local/Cellar/glib/2.46.2/include/glib-2.0 
-I/usr/local/Cellar/glib/2.46.2/lib/glib-2.0/include 
-I/usr/local/opt/gettext/include 
-L/usr/local/Cellar/gtkmm3/3.18.0/lib 
-L/usr/local/Cellar/glibmm/2.46.3/lib 
-L/usr/local/Cellar/pangomm/2.38.1/lib 
-L/usr/local/Cellar/glibmm/2.46.3/lib 
-L/usr/local/Cellar/gtk+3/3.18.6/lib 
-L/usr/local/Cellar/pango/1.38.1/lib 
-L/usr/local/Cellar/atk/2.18.0/lib 
-L/usr/local/Cellar/cairo/1.14.6/lib 
-L/usr/local/Cellar/glib/2.46.2/lib 
-L/usr/local/Cellar/cairomm/1.12.0/lib 
-L/usr/local/Cellar/cairo/1.14.6/lib 
-L/usr/local/Cellar/libsigc++/2.6.2/lib 
-L/usr/local/Cellar/gdk-pixbuf/2.32.3/lib 
-L/usr/local/Cellar/glib/2.46.2/lib 
-L/usr/local/opt/gettext/lib 
-lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lglibmm-2.4 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lgio-2.0 -lcairomm-1.0 -lcairo -lsigc-2.0 -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0 -lintl

然后你可以编译:

clang++ $(pkg-config --libs --cflags /usr/local/Cellar/gtkmm3/*/lib/pkgconfig/gdkmm-3.0.pc) someFile.cpp -o someFile

【讨论】:

  • 它就像一个魅力,谢谢! :) 我只需要添加 c++11 标志。
猜你喜欢
  • 2015-11-18
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
相关资源
最近更新 更多