Question

J'ai migré une base de données Oracle et le serveur HTTP Oracle installer à partir d'une machine 32 bits sur une machine 64 bits - les deux machines sous Linux. Oracle Database est de 64 bits, mais le serveur HTTP (Apache) est de 32 bits.

J'utilise quelques non-Oracle DSO (pour un mod_ntlm) mais chaque fois que je lance le standard "make install" chose de type je finis avec un module 64 bits.

Y at-il un moyen standard de modules pour compiler 32 bits Apache sur une machine 64 bits?

Était-ce utile?

La solution

Comme une alternative à la réponse d'Andrew Medico, utilisez « -m32 » pour les compilations 32 bits et « -m64 » pour les compilations 64 bits sur PPC ou SPARC ou Intel - puisque vous ne mentionnez pas en fait que l'architecture puce que vous utilisez et que la notation fonctionne sur toutes ces questions.

J'utilise souvent:

CC="gcc -m32" ./configure

pour assurer une compilation de 32 bits (ou, plus fréquemment, CC="gcc -m64" pour assurer la compilation 64 bits).


Question: "Est-CC une variable d'environnement utilisée par marque"

Réponse: Oui, mais dans ce cas, il est également reconnu par configure, qui est un script shell généré par autoconf. La notation je - qui est ce que j'utilise à la ligne de commande - CC définit dans l'environnement alors que la commande configure est exécutée. L'autre réponse suggère d'utiliser:

./configure CC="gcc -m32"

Je suppose que les travaux et réalise le même effet; Je ne l'ai pas essayé donc je ne sais pas que cela fonctionne.

Si vous exécutez ./configure --help | less, vous verrez des informations (souvent de l'information standard) sur la façon d'utiliser le script. Et à la fin, il donnera la liste (certains des) variables d'environnement pertinentes, dont CC est un.

L'avantage de fixer le compilateur C « gcc -m32 » est que le drapeau 32 bits est défini à chaque fois que le compilateur est utilisé - il y a très peu de place pour elle d'aller mal. Si vous définissez un drapeaux variable (CFLAGS, etc), il y a une chance que certaines commandes ne l'utilisera pas, et les choses peuvent aller mal tourné.

En outre, revenir à la question, make utilise certainement une variable (macro) appelée CC. Et vous pouvez définir que sur la ligne de commande make:

make CC="gcc -m32"

Cela remplace tout paramètre dans le makefile. En revanche, en utilisant une variable d'environnement, le paramètre dans le makefile remplace la valeur dans l'environnement, la mise en CC comme si une variable d'environnement est moins utile. Bien que make -e donne la priorité de l'environnement sur le makefile, il est généralement une option dangereuse à utiliser -. Il peut avoir des effets secondaires inattendus

Autres conseils

./configure CFLAGS="-march=i686" 

devrait le faire

En plus du drapeau -m32 dans gcc, vous devrez peut-être inclure le drapeau -melf_i386 pour ld de relier correctement les fichiers objet 32bit aux bibliothèques 32 bits si vous avez les deux bibliothèques 32bits et 64bits. Le ld standard sur les boîtes de Linux 64 bits sera par défaut aux bibliothèques 64bit et vous obtenez une erreur de compatibilité lorsque la liaison se produit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top