Não é possível acessar o cairo.h

4

Instalei o cairo-1.4.14 usando make install , mas depois de tentar compilar meu código:

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

Eu compilo usando isso:

g++ screenshot.cpp

Eu instalei 3 pacotes dessa saída, mas ainda assim o mesmo problema:

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

Informações sobre o sistema:

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

Saída 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
    
por R S 06.12.2015 / 11:24

2 respostas

3

A menos que você tenha necessidade de uma versão do Cairo diferente do que o Ubuntu fornece, siga a resposta da A.B.

Se você quiser usar o Cairo instalado manualmente, faça o seguinte.

O problema é que o libcairo instala seu cairo.h to /usr/local/include/cairo/ e não /usr/local/include/ (ou seja, um diretório mais profundo)

Você deve passar este diretório para o compilador com a opção -I .

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

Você provavelmente encontrará um erro de linker - o linker não saberá procurar por libcairo e erros em símbolos não resolvidos. Então, vamos dar a g++ mais alguns parâmetros.

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

-lcairo diz ao vinculador para procurar por uma biblioteca chamada cairo e -L/usr/local/lib fornece ao vinculador um diretório extra para pesquisa.

Observe que a ordem dos parâmetros é importante com -l - - ele deve ser colocado após os arquivos de origem ou objeto. [1] (Neste caso, após screenshot.cpp )

Isso deve ser suficiente para compilar seu binário.

pkg-config é uma ferramenta para automatizar essas coisas. Ele fornece os parâmetros de linha de comando necessários para compilar um programa usando uma biblioteca específica. Eu acho que muitas vezes overshoots e acaba ligando contra várias bibliotecas que não são realmente necessárias. A maneira manual é melhor nesse assunto.

[1] Ou então eu acho. Eu sinceramente não consigo entender o que essa página de manual do GCC está tentando dizer.

    
por oals 06.12.2015 / 16:09
7

apt-file search fornece as informações

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

Por causa disso, execute

sudo apt install libcairo2-dev

e compilar com

g++ screenshot.cpp $(pkg-config --libs --cflags cairo)
    
por A.B. 06.12.2015 / 11:43