2009-10-19 8 views
1

J'ai une applet Java qui charge le code natif via JNI. Tout fonctionnait très bien jusqu'à ce que je fasse la mise à jour de Snow Leopard, et que Safari ait décidé d'être bête. Il s'avère que Safari ne chargera que les binaires 64 bits en mode 64 bits. (Vous pouvez le mettre en mode 32 bits, mais ce n'est pas une option.) J'ai changé mon système de construction (g ++) pour supporter la construction d'un binaire universel au lieu d'un seul binaire 32 bits. J'ai réussi à créer un binaire universel, mais lorsque j'essaie de le charger dans mon applet, j'obtiens une exception de lien insatisfait en disant qu'il n'y a pas d'image appropriée trouvée et qu'il ne peut pas la mapper. Est-ce que quelqu'un à déjà eu affaire avec ça avant?Chargement d'un binaire universel avec Java

Pour info ... Quand je tapé dans le 'fichier native.dylib' dans le Terminal, le 32 binaire CAME comme:
Mach-O liées dynamiquement avec la bibliothèque partagée i386

Et quand je l'ai de même pour le binaire universel, il est sorti en tant que:
native.dylib: binaire universel Mach-O avec 2 architectures
native.dylib (pour l'architecture i386): objet Mach-O i386
native.dylib (pour l'architecture x86_64): Objet Mach-O 64 bits x86_64

+0

Peut-être que cet article est lié? http://lists.apple.com/archives/Java-dev/2009/Apr/msg00207.html – jitter

Répondre

0

J'ai découvert ce que j'avais fait qui faisait que les choses ne marchaient pas. En changeant les choses dans tous les Makefiles (il y en avait environ 10), je ne créais pas les .a correctement. J'avais une manière bizarre de construire chaque version de la source de la source individuellement, puis de les coller ensemble. Je me rends compte maintenant que c'était stupide de ma part, mais vous vivez et apprenez ... En tout cas, j'ai déterminé qu'en utilisant libtool au lieu de faire tout ce qui m'a beaucoup aidé. Au lieu de construire toutes les archs séparément, j'ai passé plusieurs drapeaux d'arche à g ++ et les ai fusionnés avec libtool.

Questions connexes