J'ai installé cairo-1.4.14 en utilisant make install
, mais après avoir essayé de compiler mon code:
fatal error: cairo.h: No such file or directory
#include <cairo.h>
^
Je compile en utilisant ceci:
g++ screenshot.cpp
J'ai installé 3 paquets de cette sortie, mais toujours le même problème:
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
Informations sur le système:
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.3 LTS
Release: 14.04
Codename: trusty
Sortie de 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
Sauf si vous avez besoin d'une version du Caire différente de celle fournie par Ubuntu, veuillez suivre la réponse de A.B.
Si vous souhaitez utiliser le Cairo que vous avez installé manuellement, procédez comme suit.
Le problème est que libcairo installe son cairo.h
sur /usr/local/include/cairo/
et non pas /usr/local/include/
(c’est-à-dire un répertoire plus profond).
Vous devez transmettre ce répertoire au compilateur à l'aide du commutateur -I
.
g++ -I/usr/local/include/cairo/ -o screenshot screenshot.cpp
Vous rencontrerez probablement une erreur dans l’éditeur de liens - l’éditeur de liens ne sait pas comment rechercher libcairo ni des erreurs sur des symboles non résolus. Donnons donc à g++
quelques paramètres supplémentaires.
g++ -I/usr/local/include/cairo/ -L/usr/local/lib -o screenshot screenshot.cpp -lcairo
-lcairo
demande à l'éditeur de liens de rechercher une bibliothèque appelée cairo
et -L/usr/local/lib
donne à l'éditeur de liens un répertoire supplémentaire dans lequel effectuer la recherche.
Notez que l'ordre des paramètres est important avec -l
- il devrait être placé après les fichiers source ou objet.[1] (Dans ce cas, après screenshot.cpp
)
Cela devrait suffire pour compiler votre binaire.
pkg-config
est un outil pour automatiser ces choses. Il vous donne les paramètres de ligne de commande nécessaires pour compiler un programme en utilisant une bibliothèque spécifique. Je pense que cela dépasse souvent et finit par créer des liens entre plusieurs bibliothèques qui ne sont pas réellement nécessaires. La manière manuelle est meilleure dans cette affaire.
[1] Ou alors je pense. Honnêtement, je ne peux pas comprendre ce que cette page de manuel de GCC tente de dire.
apt-file search
donne les informations
$ apt-file search --regex /cairo.h$
libcairo2-dev: /usr/include/cairo/cairo.h
À cause de cela exécuter
Sudo apt install libcairo2-dev
et compiler avec
g++ screenshot.cpp $(pkg-config --libs --cflags cairo)