簡體   English   中英

我可以將本機庫的32位和64位版本都放置在java.library.path上嗎?

[英]Can I place both the 32bit and 64bit versions of a native library on java.library.path?

是否可以在java.library.path上放置本機DLL的兩個版本(64位和32位)?

我擔心是否將64位和32位版本放在本機庫路徑上,在為其他體系結構運行時是否存在無法滿足的鏈接異常。 如果是這樣,首選的解決方案是什么? 在我的gradle / maven構建腳本中有一個標記鏈接正確的庫?

我目前正在執行以下操作:-

-Djava.library.path=/out/lib/win64jdk;/out/lib/winx86jdk

兩者都包含與體系結構相關的DLL。 我目前不確定JVM是否可以確定符號。

如果您是我,我將確保只有適當的本機dll位於可分發軟件包中,而將另一個保留。

但是,如果您想同時分發這兩種代碼,則需要編寫一些Java代碼來加載正確的庫。 System.loadLibrary用於加載本機庫,通常要做的是在Java代碼中的靜態初始化程序中調用它。

除非您願意完全依賴異常,否則可以使用以下代碼:

System.getProperty("sun.arch.data.model") 

加載適當的本機庫。 該函數將相應地返回32或64。

您可以選擇不添加任何一個,然后在您需要它們之前(例如,在應用程序啟動時),根據當前系統體系結構加載適當的文件。

您可以使用System.loadLibrary()加載它:

boolean is64bit = ...; // See below how to detect
System.loadLibrary("/out/lib/win" + (is64bit ? "64jdk" : "x86jdk"));

檢測架構:

如何判斷我是在64位JVM還是32位JVM中運行(從程序中)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM