[英]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"));
檢測架構:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.