Esiste un'istruzione Java indipendente dalla piattaforma per caricare una libreria nativa da una directory diversa da quella in cui si trova il codice sorgente Java? Vorrei usare qualcosa di simile:istruzione portatile per caricare la libreria JNI da una directory diversa utilizzando il relativo percorso?
public class HelloWorld {
static {
System.loadLibrary("../some_project/HelloWorld");
}
public static native void print();
}
Il problema è che System.loadLibrary() non supporta separatori di directory nell'argomento percorso. Inoltre, System.load() richiede purtroppo un pathname assoluto, che non solo significa che non posso specificare una directory relativa come sopra (che mi piacerebbe fare), ma richiede anche l'argomento per includere, per esempio, il precedente estensione "lib" e ".so" sul nome della libreria JNI su un sistema Linux.
Esiste un modo standard per gestire questo? Se possibile, vorrei evitare di scrivere una serie di codice Java dipendente dalla piattaforma solo per costruire il nome corretto della libreria JNI.
Non sarebbe più stabile se il percorso fosse relativo ad es. il tuo file .jar piuttosto che la "directory corrente". Questo è destinato a darti problemi a lungo termine se la directory corrente è qualcosa di diverso (ad esempio a causa di un collegamento sul desktop) –
Questo è un buon punto, grazie per averlo indicato. Non so come utilizzare un percorso relativo a un file .jar, ma per evitare di porre una seconda domanda in un commento, mi limiterò a collegarmi ad alcune altre domande StackOverflow che sembrano utili: http: // StackOverflow .com/questions/2837263/how-do-i-get-the-directory-that-the-currently-executing-jar-file-is-in http://stackoverflow.com/questions/5053150/how- to-know-jar-file-directory http://stackoverflow.com/questions/779650/where-on-the-file-system-was-my-java-class-loaded-da –
La prima ricerca (il uno che usa 'getProtectionDomain()') è l'unica risposta corretta a quel problema. –