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
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のマニュアルページが何を言おうとしているのか理解できません。
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)