无法访问 cairo.h

R S*_*R S 7 c c++ libraries cairo

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

fatal error: cairo.h: No such file or directory
 #include <cairo.h>
                   ^
Run Code Online (Sandbox Code Playgroud)

我用这个编译:

g++ screenshot.cpp
Run Code Online (Sandbox Code Playgroud)

我从这个输出安装了 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
Run Code Online (Sandbox Code Playgroud)

系统信息:

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty
Run Code Online (Sandbox Code Playgroud)

的输出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
Run Code Online (Sandbox Code Playgroud)

A.B*_*.B. 9

apt-file search 给出信息

$ apt-file search --regex  /cairo.h$
libcairo2-dev: /usr/include/cairo/cairo.h
Run Code Online (Sandbox Code Playgroud)

因为那个执行

sudo apt install libcairo2-dev
Run Code Online (Sandbox Code Playgroud)

并编译

g++ screenshot.cpp $(pkg-config --libs --cflags cairo)
Run Code Online (Sandbox Code Playgroud)


oal*_*als 5

除非您需要与 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
Run Code Online (Sandbox Code Playgroud)

然后您可能会遇到链接器错误——链接器不知道搜索 libcairo 和未解析符号上的错误。因此,让我们提供g++更多参数。

g++ -I/usr/local/include/cairo/ -L/usr/local/lib -o screenshot screenshot.cpp -lcairo
Run Code Online (Sandbox Code Playgroud)

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

需要注意的是参数顺序事项-l-它应该放在源或目标文件后。[1](在这种情况下,之后screenshot.cpp

这应该足以编译您的二进制文件。


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


[1] 或者我认为是这样。老实说,我无法理解 GCC 的手册页想说什么。