因为编译fcitx会用到很多dev版本的库,每次都下载的话很麻烦,而且各个发行版的包管理命令都不一样,但运行fcitx的所需库大多数发行版都已
经预装了,基本不需要再装额外包就能使用。因此,提前将fcitx编译好并存到U盘上是个不错的选择。但有两个问题:
(一)
但由此带来的问题的动态库的版本跟路径不一致。
比如,我在自己的电脑上编译,需要连接的动态库是 libXXX.so.3.1,而学校电脑只有libXXX.so.3.0,这个时候程序就无法运
行。
再比如,有些64位发行版的库的路径是/usr/lib,但有些版本是/usr/lib64,在前者系统下编译的程序放到后者就无法运行,因为程序尝试
去/usr/lib寻找动态库。
Linux下解决动态库版本及路径的问题的解决方案是pkgconfig之类的工具,但这个工具只是在编译期起作用,只是负责在编译的时候定位相应动态
库的版本跟路径
有没有在运行期的解决方案?即在程序运行时智能判断动态库版本及路径的工具?
(二)
fcitx程序的路径依赖能不能改成相对路径而非绝对路径?
比如,我在编译时指定的路径是/path1,我将程序mv到/path2,结果运行/path2/bin/fcitx时,它仍然去/path1/
lib/下寻找动态库,能不能使其去/path2/lib/下需找动态库?
这些问题其实也不光是fcitx,而是所有Linux程序通病,请问有没有有效的解决办法?
谢!
但我将这个编译好的程序拷贝到另一个发行版之后,此发行版的动态库位于/usr/lib64,且libxxx的动态库是libxxx.so.1.0,也
就是说,程序需要链接/usr/lib64/libxxx.so.1.0
但这个程序仍然会去找/usr/lib/libxxx.so.1.0.3,结果运行失败。但事实上,这个程序在这个系统下完全可以运行,只不过没有找到
正确的动态库。
请问有没有类似pkgconfig的工具,可以在运行期自动寻找依赖包版本及路径的工具?这样,程序运行之前先调用这个工具,坚持依赖包,如果没找到相
应包或包版本太低则运行失败,如果找到则将路径传给应用程序,程序再加载相应动态库。
有兴趣的人可以试试 http://uploads.csslayer.info/uploads/fcitx_portable.tar.gz ,解压后在第一层目
录执行那个脚本,64位的,我不保证能用。不过arch和chakra大概可以吧(因为我从chakra编译的)。
一般學校的機房/實驗室,是不會有root權限的。這應該是UNIX傳統的使用方式來的,少量主機,多人共享,一般的學生老師不會是root。
我之前也提過類似樓主的需求,但是沒有研究下去……
不過說一些可能對樓主有用的(也可能是廢話LOL)
ldd(1)可以用來看程序依賴的庫
http://linux.die.net/man/1/ldd
LSB規定了部分庫是一定的存在的(不對請指正)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/baselib.html
除了靜態編譯外,是否可以自帶整個依賴樹的so文件,我覺得這也是一種方式。
I'm trying fcitx-portable on CentOS 5.5 x86-64.
It does not work out-of-the-box.
I will give feedback later.
不过接下来是我用的glibc太新配不上 CentOS 的内核了。(我用的libc要求2.6.27以上内核这样……)
得重新编一个。
http://uploads.csslayer.info/uploads/fcitx_portable.tar.bz2
有兴趣的人试试这个。
2012/2/14 Ma Xiaojun <damag...@gmail.com>:
在CentOS上编译,已经用我的chakra运行没问题了。
2012/2/14 Weng Xuetian <wen...@gmail.com>:
--- fcitx.orig 2012-02-17 12:47:13.000000000 +0800
+++ fcitx 2012-02-17 12:50:29.000000000 +0800
@@ -1,6 +1,6 @@
#!/bin/sh
-export FCITXDIR=`pwd`
+export FCITXDIR=`dirname $0`
export PANGO_RC_FILE="$FCITXDIR/pangorc"
export PANGO_MODULES_FILE="$FCITXDIR/pango.modules"
给个 build instruction 吧。
--
Regards,
Aron Xu
--
您收到此邮件是因为您订阅了 Google 网上论坛的“fcitx”论坛。
要向此网上论坛发帖,请发送电子邮件至 fc...@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 fcitx+un...@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/fcitx?hl=zh-CN 访问此网上论坛。
Ref:
http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in
另外放在我网站上的怎么想都不是正经发布。no warranty, no future update :)
其實我也看了你那個ref,給一個dirname $0的Fail Case?否則再多口水也枉然。
在bash方面我是菜鳥,歡迎指教。
執政=指正⋯⋯
因為這對我有用⋯⋯對本帖的樓主也有用⋯⋯至少我改成dirname $0,我可以放在PATH裡用了⋯⋯
以及现在的binary其实都还不太好用的,应该把fcitx的那个脚本放到bin下,把bin的rename成 fcitx.bin
以及对其他的binary都这么做。这样fcitx-configtool到时候也能从界面调用了。
总之再说一次……我不对任何不在google code/github上的东西负责。
希望我扯的這些能給其他人一點點啓發,LOL