#android #gcc #arm #x86-64 #cross-compiling
#Android #ссагпз #рука #x86-64 #кросс-компиляция
Вопрос:
Я хорошо знаю, что мы можем компилировать коды для разных устройств на x86_64 (ноутбуках / ПК), используя любую цепочку инструментов кросс-компилятора (например, для ARM: arm-linux-gnueabi-gcc), но теперь мне интересно, можно ли скомпилировать для платформы x86_64 из ARM (android / cortex-А53). Мне было бы очень полезно перейти к заключению, связанному с проектом.
PS: Я использую Linux как командную строку на Android (эмулятор терминала с корневым доступом) для настройки и запуска кода на c / c .
Комментарии:
1. Конечно, почему бы и нет, вы можете скомпилировать x86 с x86, arm с x86, arm с mips, mips с arm и т. Д… Любая система, которая может запускать инструменты gnu, может создавать инструменты gnu (для той же или любой другой поддерживаемой системы).
2. можете ли вы подсказать название подходящего для этого инструмента для использования с termux? Ссылка была бы очень признательна. Спасибо
Ответ №1:
Да, можно скомпилировать для x86_64 из ARM.
Если вы используете GCC, вам придется сначала создать набор инструментов для кросс-компиляции. Есть несколько инструментов, которые могут помочь сгенерировать набор инструментов для кросс-компиляции, например Buildroot и crosstool-NG.
На Arch Linux ARM, возможно, вы можете попробовать готовые наборы инструментов здесь.
В качестве альтернативы вы также можете попробовать Clang / LLVM, который доступен в Termux. Это устраняет необходимость создания набора инструментов для кросс-компиляции, поскольку Clang по своей сути является кросс-компилятором.
Комментарии:
1. Кросс-инструментарий подразумевает наличие заголовков, которые работают для цели, и возможность фактически связать двоичный исполняемый файл с соответствующими разделяемыми библиотеками для целевой платформы.
clang -target x86_64
позволит вам создавать C для машинного кода в a.o
(если заголовки работают), но, вероятно, не имеет общих библиотек для ссылки. (И я не уверен, что LLVM вообще включает в себя кросс-линкер.)2. @PeterCordes Для LLVM, может быть, можно использовать LLD? Согласно домашней странице LLD, это всегда перекрестный компоновщик.
3. О, интересно, я и не знал, что в наши дни LLVM включает компоновщика. lld.llvm.org . Arch GNU / Linux упаковывает его отдельно от остальной части
llvm
, какlld
. Он не будет включать библиотеки для ARM или других целей, но вы могли бы, по крайней мере, связать статические исполняемые файлы.4. OP говорит о Android ARM, а не о Linux ARM.