web-dev-qa-db-fra.com

Impossible d'accéder à cairo.h

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
7
R S

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.

5
oals

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)
8
A.B.