Вам не нужны 64-битные двоичные файлы gcc для создания 64-битного приложения.Пакеты OpenCSW Solaris предоставляют 32-битный компилятор с 32-битными и 64-битными целевыми объектами.
Я предполагаю, что вы больше заботитесь о возможности генерировать 64-битные двоичные файлы из вашего gcc, и меньше о том, чтобы сам gcc был 64-bit.
Чтобы создать 32-битные и 64-битные цели, вам нужно собрать gmp два раза, один раз 32-битный и один раз 64-битный.Затем у вас есть следующий макет (пример взят из пакета pkgmap):
1 f none /opt/csw/include/gmp-32.h 0644 root bin 86213 38841 1316878625
1 f none /opt/csw/include/gmp-64.h 0644 root bin 86218 39139 1316879685
1 f none /opt/csw/include/gmp.h 0755 root bin 159 12880 1316879688
1 f none /opt/csw/include/gmpxx-32.h 0644 root bin 114646 51865 1316878625
1 f none /opt/csw/include/gmpxx-64.h 0644 root bin 114646 51865 1316879685
1 f none /opt/csw/include/gmpxx.h 0755 root bin 163 13360 1316879688
1 s none /opt/csw/lib/libgmp.so=libgmp.so.10.0.2
1 s none /opt/csw/lib/libgmpxx.so=libgmpxx.so.4.2.2
1 s none /opt/csw/lib/libgmp.so.10=libgmp.so.10.0.2
1 f none /opt/csw/lib/libgmp.so.10.0.2 0755 root bin 462552 51359 1316878625
1 s none /opt/csw/lib/sparcv9/libgmp.so.10=libgmp.so.10.0.2
1 f none /opt/csw/lib/sparcv9/libgmp.so.10.0.2 0755 root bin 503424 11223 1316879684
Система сборки GCC достаточно умна, чтобы знать, что такое /opt/csw/lib/sparcv9
для 64-битных библиотек и /opt/csw/lib
для 32-битных библиотек.
Заголовочный файл gmp.h
представляет собой оболочку, которая содержит оператор #ifdef
, включая gmp-32.h
или gmp-64.h
в зависимости от запрошенного режима компиляции.
/* Allow 32 and 64 bit headers to coexist */
#if defined __amd64 || defined __x86_64 || defined __sparcv9
#include "gmp-64.h"
#else
#include "gmp-32.h"
#endif
Библиотека gmp является единственной, для которой требуется этот тип оболочки файла заголовка;библиотеки mpc, mpfr, ppl и cloog не меняют заголовочные файлы в зависимости от архитектуры / длины слова.
Когда вы компилируете gcc с 64-битными целями, вы получаете макет с двумя файлами crt1.o:
/opt/csw/lib/gcc/sparc-sun-solaris2.9/4.6.2/crt1.o
/opt/csw/lib/gcc/sparc-sun-solaris2.9/4.6.2/sparcv9/crt1.o
Таким образом, когда вы передаете -m64, gcc создаст 64-битный двоичный файл.