Это может быть на самом деле смешной вопрос, но в компиляторах / компиляции столько всего, что я не понимаю.Мне известны концепции кросс-компиляции, кросс-нативной компиляции и т. Д. Однако я не знаю, что применимо к моему сценарию:
Я хочу сделать следующее.
Допустим, у меня есть два компьютера с различным оборудованием: A и B .
Предположим, что единственное сходство между A и B Я точно знаю:
- Оба имеют некоторый процессор Intel, способный к 64-разрядным вычислениям.
- Оба работают под управлением Windows 10 и, таким образом, могут получить доступ к Linuxдругими способами (например, WSL).
- Оба A и B имеют все программы, необходимые для компиляции (произвольного) кода.
Предположим, что у меня также есть административный доступ к A (то есть я могу делать / запускать / устанавливать все, что захочу / на него).Это , а не в случае B .
. Кроме того, (это может быть неактуально), к A можно получить физический доступ (и удаленно).если необходимо). B можно только получить удаленный доступ (через SSH, RDP и т. Д.)
Теперь скажите, что я хочу скомпилировать какой-нибудь произвольно сложный код C / C ++ оптимизировано специально для аппаратного обеспечения на A с некоторым компилятором.Например, я считаю, что -march=native
может достичь этого, если я использую gcc
на A .
Однако, скажем, A является особенным, и его вычислительная мощность не может быть «потрачена впустую» при компиляции, поскольку у него есть более важные задачи.Другими словами, я не хочу пройти через процесс компиляции, требующий много времени и энергии on A .
Вместо этого я хочу сделать эту компиляцию для A на B .
Как получить конечный результатэквивалентно "-march=native"
выполненной компиляции для A (, если используется gcc
)?Другими словами, как я могу скомпилировать код на B , оптимизированный точно для аппаратного обеспечения на A ?
Дляgcc
, это просто, как найти эквивалентные флаги для -march=native
на A , чтобы затем выполнить execute на B ?Если да, есть ли способ упростить этот процесс, а если нет, как это можно сделать (если вообще?).
Может ли процесс выполняться с помощью компиляторов, отличных от gcc (а именно компиляторы Visual C ++ и Intel C ++)?