使用選項1.構建一個32位和64位JNI庫,並根據位於32位或64位VM上加載相關的.so。
可以使用sun.arch.data.model
系統屬性爲Sun JDK
您可以使用com.ibm.vm.bitmode
爲IBM的WebSphere VM
還是在os.arch
系統屬性查找子64
(它的x86_64的/ AMD64上64位基於Intel的虛擬機)
正如你不能建立.so
的64位變體和所有它的依賴.a
和.so
文件(這其實是很好的軟件配置管理練習),那麼下面的shell腳本應該是一個很好的工作。如果在調用它的結束腳本66
退出,那麼有沒有有效的32位的Java
#!/bin/bash -p
# attempt to find a 32bit VM
# uses a dummy class file (it's just an empty file)
trap 'rm -f /tmp/testclass$$.class /tmp/jlocations.$$' EXIT HUP
touch /tmp/testclass$$.class
tryj() {
while read java; do
errout=$($java -cp /tmp -d32 testclass$$ 2>&1)
if grep -q 'java.lang.ClassFormatError' <<<$errout; then
# good VM - run with this
rm -f /tmp/testclass$$.class /tmp/jlocations.$$
# echo $java "[email protected]"
exec $java "[email protected]"
fi
done </tmp/jlocations.$$
return 1
}
# try update-alternatives - debian/ubuntu
update-alternatives --list java > /tmp/jlocations.$$ 2>/dev/null
tryj "[email protected]"
# Try alternatives - redhat
alternatives --list java > /tmp/jlocations.$$ 2>/dev/null
tryj "[email protected]"
# then try locate - generic linux/unix
locate java | grep 'bin/java$' > /tmp/jlocations.$$
tryj "[email protected]"
# if we had no luck, then use find - this will be sloooooooooow
find/-wholename '*/bin/java' >/tmp/jlocations.$$ 2>/dev/null
tryj "[email protected]"
exit 66
你如何推動本地庫到客戶端?我想你的applet是用一個可信的證書籤名的,對嗎? – home
是小程序使用可信證書籤名。使用java傳送機制將本地lib推送到客戶端 – user345794