Обнаружение 32-х и 64-х битных процессоров Intel на Mac с помощью Autoconf - PullRequest
1 голос
/ 05 марта 2009

Я разрабатываю скрипт Autoconf для проекта, который должен работать на Linux и Mac, 32- и 64-разрядных. В Linux 64-битное обнаружение легко: вы получаете x86_64 вместо i386 для build_cpu. Я не могу понять, как это сделать для Mac: и 32-, и 64-разрядные машины дают i386 для build_cpu. Есть ли способ обнаружить разницу, используя встроенные функции Autoconf?

Дополнительный вопрос: на 64-битном процессоре есть лучший способ программно определить, является ли двоичный файл 32- или 64-битным, чем следующий?

file NAME_OF_BINARY | sed -e 's/.*[^0-9]\([0-9]*\)-bit.*/\1/g'

Ответы [ 3 ]

2 голосов
/ 06 апреля 2009

Причина, по которой вы получаете i386 для build_cpu, вероятно, заключается в том, что gcc компилируется в 32-битном режиме по умолчанию в Mac OS X, даже на 64-битных процессорах. Самый простой способ справиться с этим, вероятно, состоит в том, чтобы оттолкнуть его от пользователя: если ему нужен 64-разрядный двоичный файл, он может передать от --build=x86_64-darwin до configure.

2 голосов
/ 05 марта 2009

Чтобы выяснить, какие архитектуры поддерживает бинарный файл, вы можете использовать файл, вы можете проанализировать вывод otool -f [name of bin], вы можете проанализировать вывод lipo -info [name of bin], или вы можете прочитать заголовки толстых файлов самостоятельно (это довольно простая и хорошо документированная структура). Если у вас есть двоичный файл с одной архитектурой, то otool может рассказать вам о заголовке Mach-O, который сообщает, для какой архитектуры он был скомпилирован.

Никакая идея, что Autoconf дает вам внутренне в качестве принимающей архитектуры, но как x86_64 Mac может работать x86_64, i386 или ppc7400 двоичные файлы, различие несколько спорно. Либо скомпилируйте универсальный двоичный файл, что Apple рекомендует вам, либо посмотрите на sysctl hw.optional.x86_64, чтобы определить, в каком ящике вы находитесь.

0 голосов
/ 09 апреля 2009

Следует иметь в виду, что на Mac вы можете скомпилировать несколько архитектур и создать «универсальный двоичный файл» (ранее известный как «толстый двоичный файл»). Может быть, лучше просто скомпилировать с обоими -arch i386 -arch x86_64, что позволит пользователю выбирать во время выполнения, какой из них запускать (вы также можете включить -arch ppc -arch ppc64, если вы хотите поддерживать более старые модели PPC Mac). Таким образом, если пользователь в конечном итоге переместит свою файловую систему с одного компьютера на другой, он все равно будет иметь соответствующие двоичные файлы для данного компьютера. См. 64-битное руководство по переходу для получения дополнительной информации.

...