為什么呢?因為Borland在開發JBuilder 2006的時候,是以某些內核版本比較低的Linux發行版進行開發的,我們先看看Borland給出的Release Notes中的說明吧:
Borland® JBuilder® 2006 Enterprise for Linux |
|
現在用Ubuntu 6.10作為JBuilder 2006的運行平臺,會存在一些兼容的問題,原因是JDK的某些版本對NPTL支持不是很好,很大程度上還是依賴于LinuxThread Library的實現。
關于Linux中線程庫的實現改變,我簡單說明如下(沒有仔細考究,大家湊活一下... ^ ^||| ):
Linux Distribution | Linux Kernel | GNU C Library | Linux Threading Library |
Red Hat® Enterprise Linux 3.0 | kernel-smp-2.4.21-3.EL.i686 | glibc-2.3.x, compat-glibc-2.2.4 | NPTL,LinuxThread |
Ubuntu Edgy 6.10 | 2.6.17-10-generic SMP i686 | glibc-2.4 | NPTL,LinuxThread(棄用) |
已知在NPTL上面存在問題的Java VM有:Sun JRE < 1.4.1 和 IBM JRE (版本不知,再次汗!)
所以呢,一般的做法會用更改LD_ASSUME_KERNEL環境變量的方法去強制改變內核默認的線程庫的實現,使用舊的LinuxThread模式:
LD_ASSUME_KERNEL 對應 LinuxThread 的說明 | |
2.4.19 | Linuxthreads with floating stacks |
2.2.5 | Linuxthreads without floating stacks |
說到這里讓我們回到開頭,為什么JBuilder 2006在Ubuntu Edgy上面會安裝失敗呢?甚至連安裝的界面都出不來呢!?--b
我們看看這個操作就知道了:
[xport@ubuntu ~] $ grep "LD_ASSUME_KERNEL" /media/cdrom/Disk1/InstDatahttp://Linux.chinaitlab.com/VM/install.bin linux_LD_ASSUME_KERNEL_hack=0; linux_LD_ASSUME_KERNEL_hack=1 # LD_ASSUME_KERNEL for Native POSIX Threading Library on some Linux distros export LD_ASSUME_KERNEL=2.2.5 # unset the LD_ASSUME_KERNEL in cause we don't need it unset LD_ASSUME_KERNEL # check our rules for setting LD_ASSUME_KERNEL linux_LD_ASSUME_KERNEL_hack=1 if [ $linux_LD_ASSUME_KERNEL_hack -eq 1 ]; then LD_ASSUME_KERNEL=2.2.5 export LD_ASSUME_KERNEL <-- 這里有賦值的動作,要用到LinuxThread的線程模式 [xport@ubuntu ~] $ |
所以說見鬼:“JBuilder 2006默認的安裝文件中卻還是要使用舊的線程庫模式,但Ubuntu Edgy里面已經沒有了LinuxThread的實現”!
改變LD_ASSUME_KERNEL的值,我們會得到下面的錯誤,順便說一句,我的Java版本是1.5.0_08 :
[xport@ubuntu ~] $ export LD_ASSUME_KERNEL=2.4.19 [xport@ubuntu ~] $ ls ls: error while loading shared libraries: librt.so.1: cannot open shared object file: No such file or directory |
那么,要如何來Hack呢?
把整個光盤的內容復制到用戶目錄中的一個目錄中(如~/Temp/JBE2006),操作如下:
[xport@ubuntu ~] $ cd ~/Temp/JBE2006/Disk1/InstDatahttp://Linux.chinaitlab.com/VM /* 對安裝文件進行備份 */ [xport@ubuntu VM] $ mv ./install.bin ./install.bin.borland /* 把原本安裝文件中的LD_ASSUME_KERNEL操作注釋掉,并寫入新文件 */ [xport@ubuntu VM] $ cat ./install.bin.borland | sed "s/export LD_ASSUME_KERNEL/#xport LD_ASSUME_KERNEL/" > ./install.bin [xport@ubuntu VM] $ chmod a+x ./install.bin [xport@ubuntu VM] $ cd ~ /* 請務必改寫Shell提示符,以免Install AnyWhere報錯 */ [xport@ubuntu ~] $ export PS1="> " /* 建議用Ubuntu的JDK進行安裝 */ > sh ./install.bin LAX_VM /usr/lib/jvm/java-1.5.0-sun/jre/bin/java |
這樣就可以看到之前在Windows中熟悉的安裝向導界面了,直接“下一步,下一步”繼續...!
安裝完成后,JBuilder 2006如下:
