【发布时间】:2018-07-09 01:51:58
【问题描述】:
由于 OSX 的 openssl 版本过时,我需要将更多最新的 libssl 和 libcrypto 副本与我的应用程序捆绑在一起。
我分发的捆绑版本似乎可以在最近的系统上运行(我自己的系统和我构建这些库的系统是 2015 MBP) - 但在其他一些系统上,使用那些捆绑的系统会出现“非法指令”错误图书馆。
我的问题是:
(1) 非法指令的发生是否是因为二进制文件正在使用高级指令(例如 AVX-512),而该指令在某些系统上不存在?
(2) 如何构建libssl 和libcrypto 的版本,可以 被绝大多数相对较新的苹果系统捆绑和使用? (不会引起非法指令..)
【问题讨论】:
-
与 AVX-512 无关,因为它目前仅在新发布的 iMac Pro 上找到。我猜更有可能是 AVX/AVX2 指令的问题。 “其他系统”到底是什么?
-
@PaulR 一个例子是 MacPro3,1,BootROM MP31.006C.B05,8 个处理器,四核 Intel Xeon,2.8 GHz,24 GB,SMC 1.25f4,以及 MacBook Pro 等其他处理器(13 英寸,2011 年初)等
-
好的 - 这是一个 Penryn “Harpertown” CPU,最高支持 SSE 4.1,但没有 AVX/AVX2。您可能只需要确保您的可执行文件和库都是为 SSE4.1 构建的,而不是为您的开发机器上的任何原生架构构建它们。
-
@PaulR 谢谢,我没有这样做的经验。我应该提供哪些标志?还有什么我应该知道的吗?
-
抱歉 - 我从未构建过 libssl/libcrypto,但您应该能够为 ./configure(或他们使用的任何构建系统)设置适当的选项。对于可执行文件,假设您使用的是 Xcode,则有一个构建设置
CLANG_X86_VECTOR_INSTRUCTIONS(只需在构建设置搜索框中输入“VEC”)。
标签: macos openssl clang autoconf avx512