gcc - 在另一台机器上为特定机器编译
问题描述
这实际上可能是一个荒谬的问题,但是关于编译器/编译有很多我不明白的地方。我知道交叉编译、交叉本机编译等的概念。但是,我不知道适用于我的场景的内容:
我想做的就是这个。
假设我有两台具有不同硬件的计算机A和B。
假设我确定的A和B之间的唯一相似之处是:
- 两者都有一些能够进行 64 位计算的英特尔处理器。
- 两者都运行 Windows 10,因此可以通过其他方式(例如 WSL)访问 Linux。
- A和B都有编译(任意)代码所需的所有程序。
假设我还拥有对A 的管理访问权限(即我可以做/运行/安装任何我想做的事情/在它上面)。这不是B的情况。
此外,(这可能无关紧要),可以物理访问A (如果需要,可以远程访问)。B只能远程访问(通过 SSH、RDP 等)
现在说我想用一些编译器编译一些专门为A上的硬件优化的任意复杂的 C/C++ 代码。例如,我相信如果我在A上使用可以实现这一点。-march=native
gcc
但是,假设A是特殊的,它的处理能力不能“浪费”在编译上,因为它有更重要的任务要做。换句话说,我不想在 A上经历编译的时间和功耗过程。
相反,我想在B上为A 做这个编译。
如何获得与在A"-march=native"
上完成的编译等效的最终结果(如果使用)?换句话说,如何在B上编译针对A上的硬件优化的代码? gcc
对于gcc
,是否像在A上找到等效标志然后在-march=native
B上运行执行一样简单?如果是这样,有没有办法简化这个过程,如果没有,怎么做(如果有的话?)。
可以使用gcc 以外的编译器(即 Visual C++ 和 Intel C++ 编译器)完成该过程吗?
解决方案
假设您知道目标服务器的架构(在您的情况下为 A),只需将其作为 -march 传递给 B 上的 gcc。
例子
建筑是天空湖
等等 B 使用
gcc -march=skylake ..... (rest of the flags)
如果 A 是 ryzen
gcc -march=znver1 ..... (rest of the flags)
然后将文件从B复制到A。
推荐阅读
- php - 自定义表单验证由于某种原因无法正常工作
- javascript - 如何根据fillText()宽度确定准确的fillRect()宽度?
- java - 无法通过同意页面
- javascript - 在引导选择选项中显示当前值
- python - 无法导入“progressbar2”库
- python-3.x - 导入sklearn时python版本出错
- heroku - 如果我将代码上传到 GitHub,heroku 可以编辑文件
- c++ - 如何将无界字符串的无界数组散列为不带零的 N 个整数的摘要
- arraylist - arraylist 可以增加它的大小吗?
- java - Java 不断返回异常 - TextIO 不从文件中读取