編譯失敗

HIME INPUT METHOD EDITOR, https://github.com/hime-ime/hime

版主: Tetralet

編譯失敗

文章肉腳路人 » 週六 12月 17, 2011 1:56 pm

當我嘗試下configure指令就會出現需求gtk3與gdk-pixbuf的訊息,而我的gdk-pixbuf本身有安裝在系統裡:
prefix: /usr/local
.... Testing gtk+-2.0 : Package gdk-pixbuf-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gdk-pixbuf-2.0.pc'
to the PKG_CONFIG_PATH environment variable
Package 'gdk-pixbuf-2.0', required by 'GDK', not found
.... Testing gtk+-3.0 : Package gtk+-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-3.0' found
gtk+-3.0 or above required --cflags

當然直接下會失敗,因為Makefile裡的定義不足:
Makefile:3: config.mak: 無該檔案或目錄
./configure
prefix: /usr/local
.... Testing gtk+-2.0 : Package gdk-pixbuf-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gdk-pixbuf-2.0.pc'
to the PKG_CONFIG_PATH environment variable
Package 'gdk-pixbuf-2.0', required by 'GDK', not found
.... Testing gtk+-3.0 : Package gtk+-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-3.0' found
gtk+-3.0 or above required --cflags
make: *** [config.mak] Error 255

所以就一直卡在這裡不知道該怎麼辦。
肉腳路人
 

Re: 編譯失敗

文章肉腳路人 » 週六 12月 17, 2011 3:35 pm

後來我又嘗試把configure裡面的GTK test都砍光,讓它只選用QT4的imm,然後改了要輸進去config.mak的變數:
echo "CC=/opt/solarisstudio12.3/bin/cc" > config.mak
echo "CCX=$CC -x c" >> config.mak
echo "CXX=/opt/solarisstudio12.3/bin/CC" >> config.mak
echo "CCLD=$CC" >> config.mak
echo "MAKE=/usr/sfw/bin/gmake" >> config.mak
echo "datadir=/opt/hime" >> config.mak
echo "QT4_IM=Y" >> config.mak
echo "QT4_IM_DIR=/usr/local/QT4/plugins/inputmethods" >> config.mak
手動指定了一些確定在系統中的變數,現在config.mak是產生了。但是os-dep.h那邊好像有問題,
現在是先把gdk跟glib.h移出來,移到最上方確保有被include到:
#include <glib-2.0/glib.h>
#include <gtk-2.0/gdk/gdkx.h>
但還是有問題,make時還是顯示一堆的.h找不到,我目前很頭痛這個部份:
In file included from os-dep.h:17,
from hime.h:22,
from hime.cpp:18:
/usr/include/glib-2.0/glib.h:32:26: glib/galloca.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:33:25: glib/garray.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:34:30: glib/gasyncqueue.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:35:26: glib/gatomic.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:36:29: glib/gbacktrace.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:37:26: glib/gbase64.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:38:27: glib/gbitlock.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:39:32: glib/gbookmarkfile.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:40:25: glib/gcache.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:41:28: glib/gchecksum.h: 無該檔案或目錄
/usr/include/glib-2.0/glib.h:42:30: glib/gcompletion.h: 無該檔案或目錄
...
In file included from os-dep.h:18,
from hime.h:22,
from hime.cpp:18:
/usr/include/gtk-2.0/gdk/gdkx.h:30:28: gdk/gdkprivate.h: 無該檔案或目錄
In file included from os-dep.h:18,
from hime.h:22,
from hime.cpp:18:
/usr/include/gtk-2.0/gdk/gdkx.h:41: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:42: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:43: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:43: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:44: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:44: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:45: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:46: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:47: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:48: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:49: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:50: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:51: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:52: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:53: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:54: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:55: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:56: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:57: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:59: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:61: error: syntax error before '*' token
/usr/include/gtk-2.0/gdk/gdkx.h:66: error: syntax error before "gdk_x11_get_default_screen"
...

錯誤太多了,我好像要先處理完,讓所有.h檔都被找到才有辦法進行下一步。glib/gtk那邊我是按造
系統正確位置而修改的,但還是沒有效果。
肉腳路人
 

Re: 編譯失敗

文章Tetralet » 週六 12月 17, 2011 11:53 pm

好奇怪....

請問您用的 Linux 版本是?
有沒有安裝 libgtk2.0-dev 或 libgtk-3-dev 套件呢?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

Re: 編譯失敗

文章肉腳路人 » 週日 12月 18, 2011 12:09 am

我的版本是Solaris 11 Express (snv151)
系統是gtk2版(沒有gtk3)。
想問一下hime有沒有辦法disable掉所有gtk的部份,純用QT函式庫?
另一個問題是我的gdk、gtk、glib是放在這些目錄之中:
/usr/include/gtk-2.0/gdk
/usr/include/gtk-2.0/gtk
/usr/include/glib-2.0/
但是我目前查不出程式是哪些寫死了#include導致噴了一堆XXX.h找不到的Error訊息。
不曉得os-dep.h以外還有什麼地方?謝謝。
肉腳路人
 

Re: 編譯失敗

文章Tetralet » 週日 12月 18, 2011 1:03 am

肉腳路人 寫:想問一下hime有沒有辦法disable掉所有gtk的部份,純用QT函式庫?

目前是完全不可能,除非整個推倒用QT重蓋。

肉腳路人 寫:另一個問題是我的gdk、gtk、glib是放在這些目錄之中:
/usr/include/gtk-2.0/gdk
/usr/include/gtk-2.0/gtk
/usr/include/glib-2.0/
但是我目前查不出程式是哪些寫死了#include導致噴了一堆XXX.h找不到的Error訊息。
不曉得os-dep.h以外還有什麼地方?謝謝。

HIME 是用 pkg-config 來取得 GTK2+/3+ 的一些安裝資訊和參數,
所以您可能要先安裝 pkg-config 套件才行。
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

Re: 編譯失敗

文章肉腳路人 » 週日 12月 18, 2011 10:49 am

我的系統一直有pkg-config這個套件,而/usr/lib/pkg-config/裡也有gtk+-2.0.pc這個檔案:
prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib
includedir=${prefix}/include
target=x11

gtk_binary_version=2.10.0
gtk_host=i386-pc-solaris2.11

Name: GTK+
Description: GTK+ Graphical UI Library (${target} target)
Version: 2.20.0
Requires: gdk-${target}-2.0 atk cairo gio-2.0 pangoft2
Libs: -L${libdir} -lgtk-${target}-2.0 -lsecdb -ltsol
Cflags: -I${includedir}/gtk-2.0

不曉得是不是檔案內有什麼資訊有錯,導致偵錯錯誤?
肉腳路人
 

Re: 編譯失敗

文章Tetralet » 週日 12月 18, 2011 2:05 pm

先試試以下指令:

代碼: 選擇全部
pkg-config --version gtk+-2.0

看看pkg-config 能找不找得到 gtk+-2.0?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

Re: 編譯失敗

文章肉腳路人 » 週日 12月 18, 2011 2:15 pm

sparc64: /home/mouette# pkg-config --version gtk+-2.0
0.23
肉腳路人
 

Re: 編譯失敗

文章Tetralet » 週日 12月 18, 2011 2:38 pm

肉腳路人 寫:sparc64: /home/mouette# pkg-config --version gtk+-2.0
0.23



代碼: 選擇全部
pkg-config --cflags gtk+-2.0

呢?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

Re: 編譯失敗

文章肉腳路人 » 週日 12月 18, 2011 8:22 pm

sparc64: /home/mouette# pkg-config --cflags gtk+-2.0
Package gdk-pixbuf-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gdk-pixbuf-2.0.pc'
to the PKG_CONFIG_PATH environment variable
Package 'gdk-pixbuf-2.0', required by 'GDK', not found

但是我有確認過/usr/lib/libgdk_pixbuf-2.0.so有存在。
但/usr/lib/pkgconfig裡沒有這個.pc檔
肉腳路人
 

Re: 編譯失敗

文章Tetralet » 週日 12月 18, 2011 10:54 pm

肉腳路人 寫:但是我有確認過/usr/lib/libgdk_pixbuf-2.0.so有存在。
但/usr/lib/pkgconfig裡沒有這個.pc檔

這就是問題點了,不是嗎? (笑)
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

Re: 編譯失敗

文章肉腳路人 » 週日 1月 01, 2012 1:18 am

所以你有想到什麼解決辦法嗎?謝謝。
除了叫我補裝套件以外。(套件、函式庫早就存在了)
肉腳路人
 

Re: 編譯失敗

文章Tetralet » 週日 1月 01, 2012 6:47 pm

簡單得說,因為每個系統的環境很可能大異其趣,
所以 HIME 依賴 pkg-config 來決定一些編譯參數。
這是大部份 GTK 應用程式的標準作法,
比如說 GTK+ 2.0 Tutorial 上就是介紹用 pkg-config 來編譯 "Hello World" 程式。

所以當 pkg-config 找不到 gdk-pixbuf-2.0.pc 時,
就表示您的編譯環境應該是有問題的,
這時我們真的愛莫能助...
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm


回到 HIME (姫) 專案 討論專版

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客