2012-07-18 11 views
14

これは重複する質問ではないと私は思っています。私はここで別の状況があると思う。GTK 3とUbuntuのCプロジェクトをコンパイルしてリンクする

私はUbuntu 12.04を使用し、GTK 2と3をダウンロードしました。 GNOMEのウェブサイトから簡単なGTKソースコードをコピーしました。私はターミナルで次のコマンドを使用する場合でも:

gcc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello 

私はこれを取得:ここ

hello.c:(.text+0x17): undefined reference to `gtk_init' 
hello.c:(.text+0x23): undefined reference to `gtk_window_new' 
hello.c:(.text+0x47): undefined reference to `gtk_main_quit' 
hello.c:(.text+0x5b): undefined reference to `g_signal_connect_data' 
hello.c:(.text+0x67): undefined reference to `gtk_widget_show' 
hello.c:(.text+0x6c): undefined reference to `gtk_main' 

は私のコードです:

#include <gtk/gtk.h> 

int 
main (int argc, 
char *argv[]) 
{ 
    GtkWidget *window; 

    gtk_init (&argc, &argv); 

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 

    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); 

    gtk_widget_show (window); 

    gtk_main(); 

    return 0; 
} 

は私が持っているので、エラーが表示されている場合はわかりませんGTK +の2つのバージョンまたは何か。 私はUbuntu/Linuxのアプリケーション開発で非常に初心者です。

+4

コンパイルはgccのhello.c $ 'として(PKG-config設定--cflags --libs GTK + -3.0)-o hello'すなわちソース –

+0

ああ私の神、それは働いた。どうもありがとうございます。答えとしてマークするには、以下の答えを記入してください。 – Anwar

答えて

22

ライブラリの前に表示されるソースファイルをgcc hello.c $(pkg-config --cflags --libs gtk+-3.0) -o helloとしてコンパイルする必要があります。これは、リンカーの動作であり、コンパイル時にそのライブラリのシンボルが表示されていない限り、ライブラリをリンクしないからです。
これが役立つことを願っています!

+0

+1、正確に!新しいGCC/binutilsのバージョンのかなり奇妙な挙動。 –

+4

@ H2CO3:はいサー(/マダム)!そしてそれはあまりにも人気のある質問です。 –

-1

あなたはまた、あなたのプロジェクトに直接GTKライブラリを含めることができますEclipseで

  1. 拡大:プロジェクト]> [プロパティ]> [C/C++のビルド]> [設定]> [ツールの設定>クロスGCCリンカ>ライブラリ
  2. セット:ライブラリ検索パス(-L)をファイル "libgtk-n.so"へのパスにし、nをあなたのバージョンとします。 Lubuntuに(apt-get install libgtk-3-dev)をインストールした後、これは "/ usr/lib/x86_64-linux-gnu /"でした。
  3. 次にライブラリ(-l)に追加:LIBS前のgtk-N
関連する問題