如何在使用 -static 选项编译程序时禁用 avx512?

问题描述 投票:0回答:1

我有一个可以在本地机器编译的程序,需要在远程服务器上运行,并且不允许在远程服务器上编译。

现在这些本地机器的CPU都有AVX512仪表组,但远程服务器没有。一般来说,我们可以使用

-march=x86-86, -march=core-avx2, -mo-avx512f
等来尝试禁用avx512仪器,但是有一个问题是,本地机的glibc版本比远程高,所以我需要静态编译程序。如果没有,程序将转储到远程服务器,因为glibc的版本不低(并且不允许在远程服务器上更新glibc,遗憾的是),但是当我用
-static
编译时,我会发现该程序有AVX512工具。 (我找到AVX512的方法是使用一个名为elfx86exts的工具来检查程序有什么仪器)。

有没有一些方法可以编译一个能够在远程服务器上运行的程序?

很抱歉我的英文不太好,如果有什么没表达清楚的地方请问我。谢谢大家。

我尝试了一些编译选项组合。

  1. -静态-march=x86-64。
  2. + -mno-avx512f -mno-avx512dq -mno-avx512idma 和其他 -mno-avx512** 选项。
  3. -static-libgcc -static-libstdc++ -march=x86-64
  4. -三月=x86-64。 -mno-avx512**

1,2,3在avx512测试的ci上会失败,4没有avx512,但会有glibc版本冲突。

c++ gcc compilation glibc avx512
1个回答
1
投票

但是有一个问题是,本地机器的glibc版本比远程高,所以我需要静态编译程序。

这个问题的解决办法是静态链接;它是针对 libc 的目标版本链接到

property
(例如,通过在 docker 容器内构建,或者将编译器指向备用
libc
安装)。

与普遍的看法相反,静态链接的二进制文件在移动到不同的机器时几乎永远不会(正确)工作。

© www.soinside.com 2019 - 2024. All rights reserved.