在其他计算机上为特定计算机进行编译

时间:2018-09-25 18:11:06

标签: gcc compilation cross-compiling compiler-optimization icc

这实际上可能是一个荒谬的问题,但是关于编译器/编译的很多知识我都不了解。我知道cross compiling, cross-native compiling, etc.的概念,但是我不知道什么适用于我的情况:

我想做的就是这个。

说我有两台具有不同硬件的计算机,分别是 A B

假设我确定的 A B 之间唯一的相似之处是:

  1. 两个都有一些能够进行64位计算的Intel处理器。
  2. 两者都运行Windows 10,因此可以通过其他方式(例如WSL)访问Linux。
  3. A B 都具有编译(任意)代码所需的所有程序。

假设我还具有对 A 的管理权限(即,我可以执行/运行/安装所需的任何操作)。 B 的情况并非如此。

此外,(这可能无关紧要), A 可以物理访问(如有必要,可以远程访问)。 B 只能 (通过SSH,RDP等)进行远程访问


现在说我想用一些编译器为 A 上的硬件编译一些专门优化的任意复杂的C / C ++代码。例如,如果我在{em> on A 上使用gcc,我相信-march=native可以实现这一目标。

但是,说 A 很特殊,并且在编译时不能“浪费”它的处理能力,因为它还有许多重要的工作要做。换句话说,我不是要经历在 A 上进行编译的耗时耗力的过程。

相反,我想在 A on B 上进行此编译。

如何获得等同于{em>在 A if "-march=native"上完成gcc编译的最终结果用来)?换句话说,如何针对 A 上的硬件在 B 上精确编译 的代码进行编译? >

对于gcc,在{strong> A 上运行{strong> A 上的finding the equivalent flags for -march=native 简单吗?如果是这样,有没有一种方法可以简化此过程,如果没有,如何进行(如果有的话)。

可以使用compilers other than gcc(即Visual C ++和Intel C ++编译器)完成此过程吗?

2 个答案:

答案 0 :(得分:0)

假设您知道目标服务器的体系结构(在您的情况下为A),只需将其作为-march传递给B上的gcc。

示例

建筑是高耸的天空

所以在B上使用

gcc -march=skylake ..... (rest of the flags)

如果A是ryzen

gcc -march=znver1 ..... (rest of the flags)

然后将文件从B复制到A。

答案 1 :(得分:0)

通过使用-march的GCC兼容选项或-x的ICC专用选项,可以使用Intel Compiler生成针对其他体系结构的可执行文件。这些选项记录在https://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference-x-qxhttps://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference-march中。