2010-12-02 13 views
0

私は、2つのライブラリGStreamerとlibXml2を使用するファイルapp.cを持っています。単純なアプリケーション用のMakefile

all: 
     gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2 
run: 
     ./app 
clean: 
     rm app 

予想通り、私はエラーを取得するコマンドをmakeを実行するには、次のように私は内容でメイクファイルしようとすると、私は

gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2 

ターミナル

上で次のように入力するアプリケーションをコンパイルするには。何が意味するのですか

$(pkg-config --cflags --libs gstreamer-0.10) 

私は上記をエコーし​​て、Makefileに含まれていると正しい出力が得られます。

答えて

2

pkg-config --cflags libraryXは、libraryXのヘッダファイルへのパスを出力します。これがなければ、コンパイラはヘッダファイルを探す場所を知らず、コンパイルは失敗します。

同様に、pkg-config --libs libraryXは、実際にコンパイルされたライブラリファイルlibraryXへのパスを出力します。これがなければ、リンカーはライブラリファイルを探す場所を知らず、リンクは失敗します。

pkg-config --cflags --libs libraryXは、私が上記のものを組み合わせたものです。 gccを使用してコンパイルとリンクの両方を行うので、これらのパラメータを一緒にgccに渡すだけです。

+0

ホストマシンでxml2-config --cflagsを実行すると、出力として\t -I/usr/include/libxml2が出力されます。しかし、別のプロセッサ(ゲスト)でそうすると、xml-configのエラーが見つかりません。そこにlibxml2がインストールされていますが。私はホストからのゲストのためのアプリケーションをコンパイルしたい。 – w2lame

+0

"別のプロセッサ"とは、別のユーザー名を意味しますか?ゲストアカウントにPKG_CONFIG_PATH変数が正しく設定されていない可能性があります。両方のユーザー名を使用して 'echo $ PKG_CONFIG_PATH'を実行し、結果を比較してみてください。 – misha

+0

また、 'bash'シェルを使用していることを確認してください(プロンプトに' bash'を入力するだけです)。 Ubuntuのようなディストリビューションのデフォルトのシェルは 'ダッシュ'です。私はちょうど 'ダッシュ'シェルでこれを試して、コマンド展開(バック引用符の間のビット)は正しく展開されませんでした。 – misha

関連する問題