用于二进制分发的 clang 编译器标志(通用 CPU)

Posted

技术标签:

【中文标题】用于二进制分发的 clang 编译器标志(通用 CPU)【英文标题】:clang compiler flags for binary distribution (generic CPU) 【发布时间】:2015-12-17 06:48:45 【问题描述】:

我正在为 OSX 使用 cmakeclang (700.1.81) 在大约 1 年的 OSX 10.11 上编译跨平台 C/C++ CLI 应用程序。人民币元。我正在使用 CPack 将我的应用程序打包为拖放式.dmg 安装程序。

当我在旧机器(~ 4 .y.o)上测试二进制文件时,我经常遇到SIGILL 非法指令错误(即使在相同的 OSX 版本上)。我应该使用哪些神奇的编译器调用来构建“通用”CPU? llc 例如支持-mpcu=generic 标志,但clang 不识别该标志,并且clang man 页面建议-march=cpu,但如果我尝试-march=generic 我得到error: unknown target CPU 'generic' 错误。

我已经通过-mmacosx-version-min 指定了旧的 OSX 版本,这似乎不是问题。

我是否必须通过目标三元组指定通用 CPU?那里有哪些选择?

【问题讨论】:

【参考方案1】:

对于通用架构,请尝试-march=x86-64。例如,这应该可以防止生成 Haswell 特定的指令。

【讨论】:

我使用-march=x86-64 在 i7 上生成了一些通用的东西,但是当我尝试在 Pentium G(均为 64 位)中执行时,我得到了大量的非法指令。将尝试-mtune=generic 而不是

以上是关于用于二进制分发的 clang 编译器标志(通用 CPU)的主要内容,如果未能解决你的问题,请参考以下文章

是否有仅适用于 Objective-C 的 Clang 标志?

如何自托管 Clang?

Clang代码覆盖率检测(插桩技术)

如何将编译器标志从 clang 传递给 nvcc

如何禁用“不支持优化标志”的clang警告

Visual Studio 2019 LLVM clang 标志