2009-08-11 4 views
0

Référence this question à propos de la compilation. Je ne comprends pas comment mon programme pour Mac peut utiliser le droit -arch, compiler avec ces -arch flags, les -arch flags sont pour le système sur lequel je suis (un ppc64 g5), et produisent toujours le mauvais code objet.Comment est-ce que je peux compiler le code d'objet pour le mauvais système et croiser la question de compilation?

De même, si j'utilisais un compilateur croisé et que j'étais sous Linux, je produisais du code 10.5 pour mac, comment cela serait-il différent de ce que j'ai décrit plus haut? Le contexte est que j'ai essayé de compiler divers modules apache. Ils compilent avec -arch ppc, ppc64, etc. Je ne reçois aucune erreur et je reçois mon mod_whatever.so. Mais, Apache se plaindra toujours que certains symboles ne sont pas trouvés. Apparemment, cela a à voir avec ce que le compilateur produit, même si le type de fichier dit qu'il est pour ppc, ppc64, i386, x_64 (binaire universel) et semble correspondre à tous les autres mods .so que j'ai.

Je suppose que je ne comprends pas comment il pourrait compiler pour mon système sans problème, puis dire que mon système ne peut pas l'utiliser. Peut-être que je ne comprends pas ce qu'un compilateur me donne réellement.

EDIT: Tous les messages d'erreur et le processus complet peuvent être vus here.

Merci.

+0

Vous devez être plus précis. Exactement quels messages d'erreur voyez-vous? –

Répondre

1

En regardant l'autre thread et ailleurs et sans une installation G5 ou OSX Server, je ne peux que faire quelques commentaires et suggestions, mais peut-être qu'ils vont aider.

  1. Ce n'est généralement pas une bonne idée de modifier le logiciel installé par le fournisseur d'O/S. L'installation d'un nouveau module Apache est moins problématique que, disons, l'écrasement d'une bibliothèque existante, mais vous êtes toujours à la merci du fournisseur en ce qu'une mise à jour logicielle pourrait supprimer vos modifications et, au-delà, vous devez comprendre comment la version du fournisseur construit en premier lieu. Une pratique courante dans le monde OS X est d'éviter cela en faisant une installation complètement séparée d'un produit open source, comme Apache, en utilisant, par exemple, MacPorts. Cela a aussi ses inconvénients: pour atteindre un haut niveau d'indépendance, MacPorts va souvent télécharger et construire beaucoup de paquetages dépendants pour des choses qui sont déjà dans OS X mais il n'y a pas de mal à cela à part quelques cycles de construction et espace disque supplémentaires . Cela dit, il devrait être possible de construire et d'installer des modules Apache pour compléter ceux fournis par Apple. Apple publie les modifications apportées aux produits Open Source here; vous pouvez explorer les différentes versions pour trouver le répertoire apache qui contient la source, Makefile et les correctifs appliqués. Cela pourrait être utile.

  2. Assurez-vous que le mod _ *. Que vous construisez est vraiment 64 bits et ne dépend pas de bibliothèques non-64 bits. Utilisez otool -L mod_*.so pour voir les bibliothèques dynamiques que chacune référence et puis utilisez file sur ces bibliothèques pour s'assurer qu'ils ont tous des variantes ppc64. Assurez-vous que vous utilisez des outils de développement à jour (Xcode 3.1.3 est à jour). Tandis que la chaîne d'outils de développement utilise de nombreux composants open source, Apple en a amélioré beaucoup et il existe de grandes différences dans les ABI d'OS X, le support binaire universel, les bibliothèques dynamiques, etc. Le code objet OS X sur Linux (ou toute autre plate-forme non-OS X) n'est ni supporté ni pratique.

Questions connexes