Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème Universal Binary (Compilation)

5 réponses
Avatar
Jerome VERNET
Bonjour,

Est que quelqu'un pourrait m'indiquer un moyen aisé de savoir dans les
sources quelle passe (ppc ou x86) le compilo est il en train d'executer ?

J'ai des sources "Endian dependant", mais je n'arrive pas à trouver quoi
tester dans un ifdef pour faire la difference entre la passe x86 et la
passe ppc.

Merci de vos lumières!


--
Jerome
----------------------------------------------------------------------------
Petite collection de vieilles machines....
http://perso.wanadoo.fr/jerome.vernet/
Si vous avez de vieux machins qui trainent dans vos placards, pensez à moi !
Enlever _PASDESPAM_ pour me repondre.

5 réponses

Avatar
root
Est que quelqu'un pourrait m'indiquer un moyen aisé de savoir dans les
sources quelle passe (ppc ou x86) le compilo est il en train d'executer ?

J'ai des sources "Endian dependant", mais je n'arrive pas à trouver quoi
tester dans un ifdef pour faire la difference entre la passe x86 et la
passe ppc.


Utiliser les macros __BIG_ENDIAN__ et __LITTLE_ENDIAN__

Avatar
Paul Gaborit
À (at) Fri, 04 Aug 2006 13:13:57 +0200,
Jerome VERNET écrivait (wrote):
Est que quelqu'un pourrait m'indiquer un moyen aisé de savoir dans les
sources quelle passe (ppc ou x86) le compilo est il en train
d'executer ?


Vous pouvez tester __i386__ et/ou __ppc__ mais ce sont des symboles
définis par le compilateur.

J'ai des sources "Endian dependant", mais je n'arrive pas à trouver
quoi tester dans un ifdef pour faire la difference entre la passe x86
et la passe ppc.


Pour cela, il vaut mieux chercher du côté de la directive BYTE_ORDER
qui sera plus générale (si un jour on a autre chose que du ppc ou du
i386...). C'est dans /usr/include/machine/endian.h.

Il y a peut-être une norme (POSIX ou autre) qui définit le symbole
officiel...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>

Avatar
luc
Jerome VERNET wrote:

J'ai des sources "Endian dependant", mais je n'arrive pas à trouver quoi
tester dans un ifdef pour faire la difference entre la passe x86 et la
passe ppc.


<http://developer.apple.com/documentation/Porting/Conceptual/PortingUnix
/compiling/chapter_4_section_3.html#//apple_ref/doc/uid/TP30001003-CH206
-BAJCFEBA>

"Use C preprocessor macros like __BIG_ENDIAN__ and __LITTLE_ENDIAN__ to
test endianness at compile time."

--
Luc Heinrich

Avatar
Jerome VERNET
Jerome VERNET wrote:

"Use C preprocessor macros like __BIG_ENDIAN__ and __LITTLE_ENDIAN__ to
test endianness at compile time."

Justement, j'ai essayé __BIG_ENDIAN__ (ou __LITTLE_ENDIAN__)et... ça ne

marche pas. Ca ne dit rien de spécial d'ailleurs.

J'utilise XCODE 2.3 sur un G4.

Bizarre bizarre.

Je vais essayer __ppc__.

merci de vos infos.

--
Jerome
----------------------------------------------------------------------------
Petite collection de vieilles machines....
http://perso.wanadoo.fr/jerome.vernet/
Si vous avez de vieux machins qui trainent dans vos placards, pensez à moi !
Enlever _PASDESPAM_ pour me repondre.

Avatar
Paul Gaborit
À (at) Fri, 04 Aug 2006 14:50:59 +0200,
Jerome VERNET écrivait (wrote):
Jerome VERNET wrote:

"Use C preprocessor macros like __BIG_ENDIAN__ and __LITTLE_ENDIAN__ to
test endianness at compile time."

Justement, j'ai essayé __BIG_ENDIAN__ (ou __LITTLE_ENDIAN__)et... ça

ne marche pas. Ca ne dit rien de spécial d'ailleurs.

J'utilise XCODE 2.3 sur un G4.

Bizarre bizarre.

Je vais essayer __ppc__.


L'un des deux (__BIG_ENDIAN__ ou __LITTLE_ENDIAN__) devraient être
défini. De même pour __ppc__ ou __i386__.

Pour vérifier ce que votre préprocesseur C/C++ définit :

cpp -dM /dev/null

Ça donne la liste des macros prédéfinies (avec leur valeur). Ceci
étant, ça n'indique pas celle qu'il faut utiliser...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>