忍者ブログ

素人翻訳

適当に翻訳する。

gtkライブラリ連結問題

出典:http://www.cygwin.com/ml/cygwin-xfree/2005-11/msg00088.html
Laitio Mika (Sysline) 2005年11月18日(金)

下のサイトにある gtk の hello world を構築したい。
http://forge.novell.com/modules/xfmod/cvs/cvsbrowse.php/helloworld/helloworld.tar.gz?tarball=1

環境設定(configure)における命令 PKG_CHECK_MODULES(DEPS, gtk+-2.0 >= 2.2 glib-2.0 >= 2.2) に問題があったので、「./configure」実行前にこの命令を無効にする必要があった。

結果、自分の手で Makefile に必要なライブラリと外部ファイル(include files)を加えることになった。

次のように makefile に外部参照(include)と連結(link)の変更を加えたところ、全て翻訳(compile)できたが、連結に失敗した。

-I /usr/include/gtk-2.0 -I /usr/include/glib-2.0 -I /usr/include/pango-1.0 -I /lib/glib-2.0/include -I /lib/gtk-2.0/include -I /usr/include/atk-1.0

及び

-L/usr/X11R6/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangoxft-1.0 -lXft -lfreetype -lz -lXrender -lXext -l fontconfig -lpangox-1.0 -lX11 -lpango-1.0 -lm -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv


エラー文はこの通り。

$ make
make all-recursive
make[1]: Entering directory
`/cygdrive/c/cygwin/home/lamikr/helloworld/module5'
Making all in src
make[2]: Entering directory
`/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src'
gcc -g -O2 -L/usr/X11R6/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0
-lgdk_pixbuf-2.0 -lpangoxft-1.0 -lXft -lfreetype -lz -lXrender -lXext -l
fontconfig -lpangox-1.0 -lX11 -lpango-1.0 -lm -lgobject-2.0 -lgmodule-2.0
-lglib-2.0 -lintl -liconv -o hello.exe main.o
main.o: In function `main':
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:20: undefined
reference to `_gtk_init_abi_check'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:23: undefined
reference to `_gtk_window_new'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:26: undefined
reference to `_gtk_container_get_type'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:26: undefined
reference to `_g_type_check_instance_cast'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:26: undefined
reference to `_gtk_container_set_border_width'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:29: undefined
reference to `_gtk_window_get_type'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:29: undefined
reference to `_g_type_check_instance_cast'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:29: undefined
reference to `_gtk_window_set_title'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:32: undefined
reference to `_g_type_check_instance_cast'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:32: undefined
reference to `_gtk_window_set_default_size'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:35: undefined
reference to `_gtk_window_set_default_icon_from_file'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:41: undefined
reference to `_g_type_check_instance_cast'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:41: undefined
reference to `_g_signal_connect_data'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:44: undefined
reference to `_gtk_label_new'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:47: undefined
reference to `_g_type_check_instance_cast'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:47: undefined
reference to `_gtk_container_add'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:50: undefined
reference to `_gtk_widget_show_all'
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:53: undefined
reference to `_gtk_main'
main.o: In function `on_destroy':
/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src/main.c:11: undefined
reference to `_gtk_main_quit'
collect2: ld returned 1 exit status
make[2]: *** [hello.exe] Error 1
make[2]: Leaving directory
`/cygdrive/c/cygwin/home/lamikr/helloworld/module5/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory
`/cygdrive/c/cygwin/home/lamikr/helloworld/module5'
make: *** [all] Error 2
(エラーここまで)

以下の命令をどう変えるべきか、分かる方。
"gcc -g -O2 -L/usr/X11R6/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangoxft-1.0 -lXft -lfreetype -lz -lXrender -lXext -l fontconfig -lpangox-1.0 -lX11 -lpango-1.0 -lm -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv -o hello.exe main.o"

Igor Pechtchanski 2005年11月18日(金)

全ての「-l」印の前に「main.o」を移動すればよい。(初心者がよくやる間違い)
参考:
http://cygwin.com/faq/faq.programming.html#faq.programming.linker
29.問:
連結器(linker)が何かが見つからないと文句を言う。
29.答:
よくある失敗は、命令文において、ライブラリを必要としているファイルの前にライブラリ名を書いてしまうこと。
「gcc -lstdc++ hello.cc」は間違い。「gcc hello.cc -lstdc++」が正しい。

(これはオブジェクトファイルの連結にも当てはまる。)

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

カレンダー

06 2020/07 08
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

最新コメント

[04/05 NONAME]

ブログ内検索

広告

バーコード

広告