这实际上可能是一个荒谬的问题,但是关于编译器/编译的很多知识我都不了解。我知道cross compiling, cross-native compiling, etc.的概念,但是我不知道什么适用于我的情况:
我想做的就是这个。
说我有两台具有不同硬件的计算机,分别是 A 和 B 。
假设我确定的 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 ++编译器)完成此过程吗?
答案 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-qx和https://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference-march中。