2013-08-26 91 views
0

我通過Java中的JNI使用了一些C++代碼。 C++代碼使用libstdC++和libz中的一些函數。 C++部分鏈接到共享庫中,並且在不同環境(基於Linux)上使用該構建庫。JNI,C++及其標準庫

我關心的是libstdC++和libz版本的區別。如果我在環境A上構建了這個JNI庫,並且它的環境B和C可能有其他libstdC++和libz版本 - 它會失敗嗎?這是否意味着我需要將這些庫靜態鏈接到我的JNI共享庫?

P.S. 2個稍微不同的環境的第一個測試成功,但我仍然覺得這裏不安全。

回答

2

這與C++的非JNI用法沒有什麼不同。一般來說,圖書館提供商力求確保向後兼容 - 所以在大多數情況下,您的擔心不是偶然發現過時的版本。

有幾種常見的選擇:

  1. 依靠包裝,以確保您的依賴正確的版本(例如,如果你包裝成RPM/Linux上的DEB包設置在包元數據要求)。對於Mac,您通常針對標準庫的特定操作系統版本以及捆綁非標準庫(libz)與您的安裝程序。我不認爲你可以預期Windows上的libstdC++,沒有Cigwin和喜歡。
  2. 靜態鏈接。
  3. 將您的應用程序打包共享庫。