2013-03-15 139 views
7

是否可以構建HelloWorld.lib並使用JNI將其加載到Java應用程序中?或者它只與共享庫一起工作?是否可以通過JNI將靜態庫鏈接到Java?

我在JNI文檔中找不到明確的答案,沒有提及「靜態庫」。

+0

檢查http://stackoverflow.com/questions/2349093/static-libraries-and-jni – BackSlash 2013-03-15 13:31:46

+0

@Harlandraka我看到的問題發佈前,但鏈接死。而且,現在它直接是問題答案而不是問題評論。 – quimnuss 2013-03-15 13:42:14

回答

3

它需要是一個動態庫。幸運的是,您可以從靜態庫構建動態庫。

+0

就像我想的那樣...所以我想我必須使用-fPIC標誌重新編譯靜態庫,該死的。 – quimnuss 2013-03-15 13:39:24

+0

或者將其封裝在動態/共享庫中,避免重新編譯。 – 2013-03-15 13:44:13

+0

您可以粘貼一個鏈接,如何從靜態庫中獲取尚未用fPIC編譯的共享庫? – quimnuss 2013-03-15 15:29:08

1

要在運行時加載庫,它必須是dll(windows)。如果你有一個靜態庫(lib),你必須通過JNI來使用它,你必須創建一個包裝器DLL

0

你將不得不將它鏈接到JVM,你沒有辦法做到這一點。這就是爲什麼JNI是用共享庫定義的,而不是靜態的。