2009-09-29 309 views
2

我已經有了一個針對Linux編譯的用於Linux下ELF格式的庫,該庫正在被Java程序使用。我試圖將此應用程序移植到Mac OS X,並發現OS X爲這些文件使用了不同的擴展名.jnilib。我已經想出瞭如何設置PATH,以便它正確地找到文件。但是,OS X Java無法加載.so文件(因爲它期望其他擴展名)。將.so文件轉換爲.jnilib文件

如果我將文件擴展名從.so更改爲.jnilib,則JVM可以找到這些文件但無法讀取它們(因爲它們編譯不正確)。

有什麼辦法,無論是在Linux系統或Mac OS X中,沒有源代碼,這些.so文件轉換爲.jnilib?我懷疑這是不可能的,但Stack Overflow並沒有讓我失望 - 而且我不會把「這不可能」當作失敗。

回答

3

您是否試圖在Mac OS X上使用適用於Linux的本機庫?不,那不行。

您需要獲取本機庫的Mac版本,並將其重命名爲jnilib(如果它沒有該後綴)。

這是JVM字節碼和本機代碼之間的主要區別。本機代碼是非常特定於平臺的。我們甚至爲不同的linux版本提供了多個版本的JNI庫。

由於Mac和Linux都使用相同的CPU,它們都是基於Unix的,所以我不會說這是不可能的,即使它非常接近。

+0

這就是我所害怕的。爲了迴應你的第一個問題,是的,這就是我想要做的,但不幸的是,我無法獲得Mac版本的本地庫 - 該公司使它沒有可用的Mac版本。 – 2009-09-29 22:21:29