无法访问 cairo.h

无法访问 cairo.h

我已经使用 安装了 cairo-1.4.14 make install,但是在尝试编译我的代码后:

fatal error: cairo.h: No such file or directory
 #include <cairo.h>
                   ^

我使用这个进行编译:

g++ screenshot.cpp

我从这个输出安装了 3 个包,但仍然存在同样的问题:

apt-file search --regex /cairo.h$
libcairo2-dev: /usr/include/cairo/cairo.h
r-cran-rgtk2: /usr/lib/R/site-library/RGtk2/include/RGtk2/cairo.h
thunderbird-dev: /usr/include/thunderbird/cairo/cairo.h

系统信息:

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty

输出pkg-config --libs --cflags cairo

-I/usr/local/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12  -L/usr/local/lib -lcairo

答案1

apt-file search提供信息

$ apt-file search --regex  /cairo.h$
libcairo2-dev: /usr/include/cairo/cairo.h

因为执行

sudo apt install libcairo2-dev

并编译

g++ screenshot.cpp $(pkg-config --libs --cflags cairo)

答案2

除非您需要与 Ubuntu 提供的版本不同的 Cairo 版本,否则请遵循 AB 的回答。

如果您想使用手动安装的Cairo,请执行以下操作。

问题是 libcairo 安装到cairo.h/usr/local/include/cairo/不是/usr/local/include/(即更深的一个目录)

您必须使用开关将此目录传递给编译器-I

g++ -I/usr/local/include/cairo/ -o screenshot screenshot.cpp

然后你可能会遇到链接器错误——链接器不知道搜索 libcairo 并出现未解析符号的错误。所以让我们g++再提供几个参数。

g++ -I/usr/local/include/cairo/ -L/usr/local/lib -o screenshot screenshot.cpp -lcairo

-lcairo告诉链接器搜索一个调用的库cairo-L/usr/local/lib为链接器提供一个额外的目录来搜索。

注意参数顺序很重要with -l— 它应当放在源文件或目标文件之后。[1](在本例中,在 之后screenshot.cpp

这对于编译你的二进制文件来说应该足够了。


pkg-config是一个自动化这些事情的工具。它为你提供使用特定库编译程序所需的命令行参数。我认为它经常会超出范围并最终链接到多个实际上不需要的库。在这方面,手动方式更好。


[1] 或者说我是这么认为的。老实说,我不明白 GCC 手册页到底在说什么。

相关内容