【问题标题】:How do I build OpenSSL as 32-bit (i386) on Mac OS X?如何在 Mac OS X 上将 OpenSSL 构建为 32 位 (i386)?
【发布时间】:2011-05-04 07:24:39
【问题描述】:

我下载了 OpenSSL 源代码,并做了configmakesudo make install 三部曲。

然后我构建了我的项目,链接了 libcrypto.a 和 libssl.a,但是得到了:

ld: warning: in /usr/local/ssl/lib/libcrypto.a, file was built for unsupported file format which is not the architecture being linked (x86_64)
ld: warning: in /usr/local/ssl/lib/libssl.a, file was built for unsupported file format which is not the architecture being linked (x86_64)

我很确定我想将 OpenSSL 重新构建为 32 位 (i386),因为(由于与此问题无关的原因)我的项目需要是 32 位的。

如何在 Mac OS X 上将 OpenSSL 构建为 32 位? (我在“安装”文件中没有看到任何关于此的内容。)

【问题讨论】:

  • 通常在 OS X 上,64 位 Intel 称为 x86_64,32 位 Intel 称为 i386(参见 man arch)。
  • 注意,事实证明我不需要在 Mac OS X (10.6.4) 上下载和构建 OpenSSL。一旦我得到正确的链接器(-l)参数,我的项目就可以正常构建。 (有人告诉我,与 Mac OS X “捆绑”的 OpenSSL 库是一个胖二进制文件,包括所有 x86_64、i386 和 PPC 构建。
  • 没错,OS X 中包含的几乎所有东西都是多架构通用的。构建自己的 OpenSSL 的唯一原因是您是否需要更新版本。
  • @NedDeily 既然如此,您是否建议通过删除我的 64 位 brew 安装的 openssl 来解决此问题,以便构建可以访问 OS X 的通用?:stackoverflow.com/questions/34832512/…
  • @Pyderman,如果您需要 OpenSSL 库的 32 位/64 位最新版本,Homebrew 现在似乎支持构建通用版本;见github.com/Homebrew/homebrew/issues/28448

标签: macos build openssl 32bit-64bit


【解决方案1】:
$ curl https://www.openssl.org/source/openssl-1.0.0a.tar.gz | tar xz
$ cd openssl-1.0.0a
$ export CFLAGS="-arch i386"
$ export LDFLAGS="-arch i386"
$ ./config
$ make
$ lipo -info libssl.a
input file libssl.a is not a fat file
Non-fat file: libssl.a is architecture: i386
$ lipo -info libcrypto.a
input file libcrypto.a is not a fat file
Non-fat file: libcrypto.a is architecture: i386

【讨论】:

  • 这是一个很好的答案!整洁!
  • 我已经下载了openssl-1.0.2g。似乎配置默认为 i686 构建,CFLAGS 和 LDFLAGS 不是必需的。
  • 当前稳定版本为openssl-1.1.0i.tar.gz。另外,对我来说,配置 32 位构建的正确方法是:./Configure darwin-i386-cc(而不是使用上面显示的export 命令和./configure 命令)
【解决方案2】:

如果有人正在寻找构建动态库的解决方案,可以这样做:

tar -xvzf <openssl gz file>
./Configure darwin-i386-cc -shared 
make

对于 64 位,运行

./Configure darwin64-x86_64-cc -shared
make

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 2011-10-18
    • 2012-02-03
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2013-04-07
    • 2011-12-17
    • 2018-03-29
    相关资源
    最近更新 更多