гve installed cairo-1.4.14 using make install
, but after trying to составьте my code:
fatal error: cairo.h: No such file or directory
#include <cairo.h>
^
I составил using this:
g++ screenshot.cpp
I installed 3 packages from this output, but still the same problem:
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
Info about system:
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.3 LTS
Release: 14.04
Codename: trusty
Output of 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
Если у Вас нет потребности в Каирской версии, отличающейся от того, что предоставляет Ubuntu, следуйте ответу A.B.'s.
Если Вы хотите использовать Каир, Вы установили вручную, сделайте следующим образом.
Проблема состоит в том, что 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
дает компоновщику дополнительный каталог для поиска от.
Обратите внимание, что параметр заказывает вопросы с -l
- это должно быть помещено после исходных или объектных файлов. [1] (В этом случае, после screenshot.cpp
)
Это должно быть достаточно для компиляции Вашего двоичного файла.
pkg-config
инструмент для автоматизации этих вещей. Это дает Вам параметры командной строки, необходимые для компиляции программы, пользующейся определенной библиотекой. Я думаю, что это часто промахивается и заканчивает тем, что связалось против нескольких библиотек, которые не на самом деле необходимы. Ручной путь лучше в том вопросе.
[1] Или таким образом, я думаю. Я честно не могу схватить то, что та страница руководства GCC пытается сказать.
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)