cht電腦資訊gcin
adm Find login register

在 64-bit Linux 下無法載入 32-bit gcin library?

siyuan
1 在 64-bit Linux 下無法載入 32-bit gcin library?
Promote 0 Bookmark 02012-01-08quote  

長久以來在 64-bit ArchLinux 用 Skype 總是叫不出 gcin,後來想到 32-bit 的程式一般需要載入 /usr/lib32 下的 library。但 64-bit 的 gcin 並不包含 32-bit 的 library,所以想嘗試自己 compile。在參考了其他 lib32-* package 之後 compile 了 lib32-gcin。configure 裡的 LIB='lib' 改成 LIB='lib32',也成功 compile 了。在確定 compile 出來的 binary 是 32-bit,且 qt4-im 的 plugin 也正確放入 lib32-qt 下後,發現 gcin 還是叫不出來。不知是我沒 compile 好,還是 32-bit library 不能跟 64-bit gcin 通?但我看 im-client 似乎是用 socket 來溝通,就算是 32-bit 也應該可以跟 64-bit server 溝通? #define 了 DBG 1 之後也沒看到什麼錯誤訊息。手動寫個測試程式去叫 gcin_im_client_open 同樣也沒有什麼錯誤訊息,但 gcin 就是不出來...

當然這問題只有 32-bit 的程式才有,Skype 大概是目前唯一一個我常用的 32-bit 程式 (Skype 早點死吧,好讓 gtalk 取代 XD...)。

eliu
2
Promote 0 Bookmark 02012-01-08quote  

那為何不直接 install 別人 compile 好的 32-bit archlinux gcin package ? 會衝突嗎?

不論32/64 bit 的 gcin process(server),可以接受 32/64 im-client 是沒問題的。

不會說 32-bit im-client 就只能搭配 32-bit gcin process

edited: 1
siyuan
3
Promote 0 Bookmark 02012-01-08quote  

ArchLinux 並沒有提供的 64-bit gcin 是不含 32-bit library,且不能直接安裝 32-bit 的 gcin,因為兩種版本有重複的檔案。如 /usr/bin/*、/usr/share/gcin/*,的確會衝突。ArchLinux 的做法是以 32-bit cross compile,然後將 library 抽出,最後在 package 名稱上標上 lib32。安裝時,library 都會裝到 /usr/lib32 才不會跟 64-bit 的 library 重疊。我也想以相同的方法 compile 32-bit library,但不知為何無效。不知其他 64-bit Linux 是否正常?

eliu
4
Promote 0 Bookmark 02012-01-09quote  

看起來比較好的做法是 compile 32-bit gcin 時把 gtk2, gtk3, qt4 的 im module 分開包裝,並且 把 gcin package dependency 成與 im module 有關聯,這樣就可以 install gcin 時同時 install im module。

siyuan
5
Promote 0 Bookmark 02012-01-12quote  

找到問題了,問題不單純...
Qt 在 load plugin 時會檢查 plugin 的 buildkey,而我的 plug buidkey 是 x86_64,跟 i386 是不相符的,所以 plugin 不被載入。而 buildkey 是在 $QTDIR/include/QtCore/qconfig.h 裡定義的。因為系統安裝的 Qt 是 64-bit,所以 qconfig.h 裡是 #define QT_BUILD_KEY "x86_64 linux g++-4 full-config"。但問題來了,32-bit 的 Qt 是不能和 64-bit Qt 重疊安裝的,只有 32-bit Qt library 可以裝。但 32-bit Qt library 並不包含 header 檔...

本來以為直接拿 compile 好的 32-bit gcin 裡的 im-module 就能用,但 32-bit library 都放在 /usr/lib32,32-bit 的 im-module 跑去 load /usr/lib 下 64-bit 的 gcin-im-client,當然不能用。

我目前是手動將 32-bit Qt 的 header 檔取出,放在 gcin 的 source 裡,強行更改 include path。最後 compile 出來的 im-module 果然可以用了。不過正確的 package 製作方式可能要跟 Arch Linux 的 dev 請教了。

Guest
6
Promote 0 Bookmark 02012-01-12quote  

疑?我的桌機也是安裝Arch Linux 64bit,在Skype下打中文並沒有問題。

siyuan
7
Promote 0 Bookmark 02012-01-12quote  

可能你是用 XIM?我是用 QT_IM_MODULE。

Guest
8
Promote 0 Bookmark 02012-01-13quote  

siyuan

可能你是用 XIM?我是用 QT_IM_MODULE。

很有可能,我的設定在這邊。我當初並沒有去深究這個問題,只要能夠輸入中文就可以了 Tongue out

cht電腦資訊gcin
adm Find login register
views:16847