網上給出的在Windows和Linux操做系統下的JNI編程教程不少,其實不管在哪一個系統中都是類似的步驟。總結以下: java
惟一不一樣的處在於本地庫文件的編譯方式不一樣。 linux
Windows中,通常使用VisualStudio IDE生成"庫名.dll"動態連接庫文件。(注意:庫文件的命名方式及其重要!) 編程
Linux中使用gcc進行編譯。通常要使用-I選項包含$JAVA_HOME/include和$JAVA_HOME/include/linux,並使用-fPIC -shared -o lib庫名.so生成動態連接庫文件。 測試
而在Mac OS X中,採用和Linux和有類似的作法。可是我嘗試後發現,不管我將該庫文件放置於何處,而且如何設置java.library.path都會產生java.lang.UnsatisfiedLinkError異常,說沒法找到該庫文件。網上也未找到答案。後來偶然在java.library.path路徑之一的/usr/lib/java中發現裏面有個libjdns_sd.jnilib文件。莫非這個動態庫文件必須以jnilib做爲後綴名?當即更改文件名,果真能正常運行!
spa
結論:Mac OS X中,欲使用JNI調用本地庫,該庫文件名稱必須是 lib庫名.jnilib,而不是以.so爲後綴名。 操作系統
至於Windows和Linux中動態庫文件名到底爲什麼,本人未作測試。通常而言,應該能夠在java.library.path中找到例證。 教程
補充: dns
在用Eclipse開發時,若是java.library.path包含.(當前文件夾),則將對應本地庫文件置於項目文件夾下(src和bin的父文件夾)。 ip