2012-12-13 14 views
7

Ho giocato un po 'con Java 7 update 9 su mac e ho trovato una cosa interessante.Java 7 e JavaVM.framework su mac

Ho appena eseguito un semplice programma Java con un JFrame e lo allego con lldb. Poi ho controllato le librerie caricate da questo programma Java e ho visto:

"/System/Library/Frameworks/JavaVM.framework/JavaVM" in esso.

Così ho 2 domande:

  1. che cosa fa questo JavaVM fare per Java 7? Pensavo che Java 7 su mac fosse auto-consistente come le sue versioni corrispondenti su Windows e Linux. Usando "nm", posso vedere che JavaVM ha definito molte funzioni come JNI_CreateJavaVM, che è anche definita in libjvm.dylib.

  2. A cosa devo collegarsi per le librerie JNI con Java 7? ancora JavaVM.framework? Posso collegarmi alle librerie situate sotto

    /Library/Java/JavaVirualMachine/jdk.1.7.0 direttamente.

Qualsiasi aiuto sarà molto apprezzato.

+0

possibile duplicato di [Hai bisogno di aiuto per capire Java di Oracle su Mac] (http://stackoverflow.com/questions/15120745/need-help-understanding-oracles-java-on-mac) – BryanH

risposta

0

Per la prima parte, JavaVM punta al Mac JavaVM (1.6). Osservando più da vicino i file Info.plist, sembra che il Mac Java supporti JNI (tra le altre cose), mentre Oracle Java supporta solo CommandLine. Non sembra possibile collegare a 1.7 su Mac OS X. Ci sono anche molte domande correlate.

per trovare il tuo JVM che supportano JNI, fare questo:

/usr/libexec/java_home -t JNI 

Questo dovrebbe probabilmente restituire il 1.6.0 JDK. È possibile eseguirlo con l'argomento -V per ottenere un elenco completo di ciò che le JVM sono disponibili.

+0

Usiamo JNI tutto il tempo con l'Oracle 1.7. Intendi solo chiamare _into_ java, forse? – bmargulies

+0

@bmargulies su Mac OS X? E non sta usando 1.6? – Matt

+0

Sì, certo. – bmargulies

0

L'Oracle JDK su Mac è pubblicizzato come qualsiasi altro JDK Oracle. Ha comandi, intestazioni e librerie. Dovresti essere in grado di usare il contenuto del JDK come faresti altrove. Generalmente creiamo e usiamo librerie JNI che vengono caricate con LoadLibrary; Non posso segnalare esperienze personali con l'interfaccia di chiamata.