18

OS: フェドラ 14

コンパイラ: g++ (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)

yum経由でリポジトリからgtkmm24-develをインストールしました。インストールが計画どおりに行われたことを確認するために、ページの例の 1 つを試すことにしました。

#include <gtkmm.h>

int main(int argc, char *argv[]) {
    Gtk::Main kit(argc, argv);
    Gtk::Window window;
    Gtk::Main::run(window);
    return 0;
}

私は例を実行しました。gtkmm.h が見つからないと言われましたが、問題ありません。ライブラリをリンクするのを忘れただけです。/usr/include/gtkmm-2.4 を Eclipse のライブラリ検索に追加しました。いいえ、ブエノ、g ++ はまだそれを見つけることができません!

fatal error: gtkmm.h: No such file or directory

次に、使用して再コンパイルして gtkmm をインクルードしようとしましたが#include <gtkmm-2.4/gtkmm.h>、別のエラーが発生しました! :(

/usr/include/gtkmm-2.4/gtkmm.h:87:20: fatal error: glibmm.h: No such file or directory

読んでくれてありがとう。

4

2 に答える 2

25

簡潔な答え

インクルード パスには「pkg-config gtkmm-2.4 --cflags」の出力を使用し、リンクするライブラリには「pkg-config gtkmm-2.4 --libs」の出力を使用します。

長い答え

gtkmm.h が見つからないと言われましたが、問題ありません。ライブラリをリンクするのを忘れただけです。

C/C++ プログラムのビルドは、2 つの別個のステップで行われます。最初にソース ファイルがコンパイルされ、オブジェクト ファイルが出力されます。そして、オブジェクト ファイルがリンクされます。あなたが得ているエラーは、コンパイルステップから来ています。

Linux では、ほとんどのライブラリに pkgconfig ファイルが付属しており、他のプログラムがライブラリを簡単に使用できるようになっています。gtkmm には、独自の pkgconfig ファイルも付属しています。

インクルード パスに /usr/include/gtkmm-2.4 を手動で指定しようとしています。これは間違っています。代わりに、pkgconfig の出力を使用して、ヘッダー ファイルの場所を特定します。gtkmm に必要なすべてのインクルード ディレクトリを取得するには、次のコマンドを使用します。

pkg-config gtkmm-2.4 --cflags

リンクするには、次の pkgconfig コマンドを使用して、リンクする必要があるライブラリを取得します。

pkg-config gtkmm-2.4 --libs

g++ を直接呼び出すことにより、コマンド ラインでテストできます。

g++ myfirstprogram.cpp -o myfirstprogram `pkg-config gtkmm-2.4 --cflags --libs`

詳細については、gtkmm のドキュメントを参照してください: http://library.gnome.org/devel/gtkmm-tutorial/unstable/sec-basics-simple-example.html.en

于 2011-01-05T23:08:24.507 に答える
1

これらの手順は通常、この問題の解決に役立ちます。

  • コンピューターで glibmm.h を検索します
    • 見つかった場合 - そのディレクトリをインクルード パス リストに追加します
    • 見つからない場合 - glibmm.hを Google で検索し、どのライブラリに含まれているかを調べます。この場合、(驚き!) glibmm であることがわかります。パッケージマネージャーを使用してインストールします。

コメントに記載されているように、問題はコンパイラ エラーであり、コンパイラは不足している (ヘッダー) ファイルについて議論しています。上記の手順は、不足しているファイルの場所を見つけるか、ヘッダー ファイルが属するライブラリをインストールするのに役立ちます。

于 2011-01-05T22:24:19.577 に答える