Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

autoconf: 32/64 bit unterscheiden

6 views
Skip to first unread message

Ole Streicher

unread,
Nov 20, 2001, 3:21:58 AM11/20/01
to
Hallo!

Ich moechte gerne von configure erfahren, ob der Compiler 32-bit- oder
64-bit-Binaries baut (bei IRIX z.B. mit der Environment-Variable
ABI_SGI einstellbar) - z.B. um an die korrekten Biliotheken zu linken.

Leider gibt es keinen direkten Test darauf; ein Versuch mit

AC_CHECK_SIZEOF(int)

in configure.in schlaegt fehl: sizeof(int) ist immer 4. Ein
Primitivtest ("int main(void){printf("%d\n",sizeof(int));}") sagt fuer
cc -32 und cc -64 das gleiche: "4".

Worin unterscheidet sich (bei IRIX) 32 und 64 bit eigentlich ausser im
Objektformat und wie kann ich darauf testen?

Ich habe auch offenbar nicht genau verstanden, wie ich in configure.in
an das Ergebnis als Shellvariable komme; ist ein

INTSIZEINBIT=`expr 8 \* $ac_cv_sizeof_int`

korrekt?

Tschuessi

Ole

Falk Hueffner

unread,
Nov 20, 2001, 6:52:34 AM11/20/01
to
Ole Streicher <ole-us...@gmx.net> writes:

> Ich moechte gerne von configure erfahren, ob der Compiler 32-bit-
> oder 64-bit-Binaries baut (bei IRIX z.B. mit der
> Environment-Variable ABI_SGI einstellbar) - z.B. um an die korrekten
> Biliotheken zu linken.
>
> Leider gibt es keinen direkten Test darauf; ein Versuch mit
>
> AC_CHECK_SIZEOF(int)
>
> in configure.in schlaegt fehl: sizeof(int) ist immer 4.

Ueblicherweise bleibt int auf 64-Bit-Plattformen 4 bytes, aber long
und alle Pointer sind 8 bytes (Ich weiss allerdings nicht, ob das bei
IRIX aucgh so ist.). Probier also mal void*.

Falk

Felix von Leitner

unread,
Nov 21, 2001, 5:27:59 PM11/21/01
to
Thus spake Ole Streicher (ole-us...@gmx.net):

> Ich moechte gerne von configure erfahren, ob der Compiler 32-bit- oder
> 64-bit-Binaries baut (bei IRIX z.B. mit der Environment-Variable
> ABI_SGI einstellbar) - z.B. um an die korrekten Biliotheken zu linken.

Wie bitte? Das meinst du nicht ernst, oder?

Sowas prüft man zur Laufzeit und _nur_ zur Laufzeit. Wenn der Linker
32-bit und 64-bit Libraries linkt, gehört er im Mariannengraben
versenkt.

Felix

Ole Streicher

unread,
Nov 22, 2001, 5:23:28 AM11/22/01
to
Hallo Felix!

Felix von Leitner <usenet-...@fefe.de> writes:
> > Ich moechte gerne von configure erfahren, ob der Compiler 32-bit- oder
> > 64-bit-Binaries baut (bei IRIX z.B. mit der Environment-Variable
> > ABI_SGI einstellbar) - z.B. um an die korrekten Biliotheken zu linken.
> Wie bitte? Das meinst du nicht ernst, oder?

Meinte ich eigentlich, aber ich bin auch lernfaehig :-)

> Sowas prüft man zur Laufzeit und _nur_ zur Laufzeit.

Da die Aufgabenstellung ein statisch gelinktes Executable verlangt,
kann es nicht erst zur Laufzeit geprueft werden, sondern spaetestens
beim Linken.

Mir wuerde es tatsaechlich auch reichen, wenn ich zur Linkzeit (und
nicht schon vor dem Kompilieren) die korrekte Bibliothek weiss: aber
wies sage ich dem Linker, dass er von den Bibliotheken libunsinn.a,
libunsinn-64.a, libunsinn-n32.a, libunsinn-o32.a, libunsinn_32.a (und
was dem Auftraggeber noch so an Bezeichnungen fuer die Bibliothek
einfaellt) die korrekte linken soll?

IMO ist doch der korrekte Weg, genau dies von configure vorher
ueberpruefen zu lassen, oder?

> Wenn der Linker 32-bit und 64-bit Libraries linkt, gehört er im
> Mariannengraben versenkt.

Er tut es ja nicht (gluecklicherweise; nur dadurch kann configure ja
durch Linkversuche die korrekte Bibliothek herausfinden).

Tschuessi

Ole

0 new messages