web-dev-qa-db-ja.com

cairo.hにアクセスできません

make installを使用してcairo-1.4.14をインストールしましたが、コードをコンパイルしようとした後:

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

私はこれを使用してコンパイルします:

g++ screenshot.cpp

この出力から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

システムに関する情報:

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

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

Ubuntuが提供するものとは異なるCairoバージョンが必要でない限り、A.B。の回答に従ってください。

手動でインストールしたCairoを使用する場合は、次のようにします。

問題は、libcairoがcairo.hではなく/usr/local/include/cairo//usr/local/include/をインストールすることです(つまり、1つのディレクトリよりも深い)

-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はリンカーに検索元の追加ディレクトリを提供します。

パラメータの順序が重要 with -l-ソースファイルまたはオブジェクトファイルの後に配置する必要があることに注意してください。[1] (この場合、screenshot.cppの後)

これでバイナリをコンパイルするのに十分なはずです。


pkg-configは、これらのことを自動化するためのツールです。特定のライブラリを使用してプログラムをコンパイルするために必要なコマンドラインパラメータを提供します。しばしば行き過ぎて、実際には必要のない複数のライブラリにリンクしてしまうと思います。その点で、手動の方法の方が優れています。


[1]またはそう思います。私は正直、GCCのマニュアルページが何を言おうとしているのか理解できません。

5
oals

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