编译universal binary

有一个程序是基于openssl库的程序,需要把openssl的静态链接库编译到binary中;
1.编译openssl的静态链接库,生成i386,ppc,x86-64,ppc64的架构的库文件;
  目前使用的openssl的版本是openssl-0.9.8l,macos的版本是10.5(leopard).
  首先把openssl-0.9.8l.tar.gz复制到相应的位置,运行命令tar -zxvf openssl-0.9.8l.tar.gz解压缩文件,运行命令./config生成Makefile

文件,然后运行命令make测试
  生成的Makefile文件。然后按照如下步骤修改Makefile文件。
  1.1生成i386的静态链接库
     1.复制文件cp Makefile Makefile_i386
     2.修改Makefile_i386
       第63行 在-DHAVE_DLFCN_H后面添加 -arch i386
       第173行 修改为SHARED_LDFLAGS=-arch i386 -dynamiclib
     3.生成i386的静态连接库
       运行命令make -f Makefile_i386
       生成的libcrypto.a和libssl.a就是i386的静态库
     4.运行命令
       mv libcrypto.a libcrypto_i386.a
       mv libssl.a libssl_i386.a
  1.2生成ppc的静态链接库
     1.复制文件cp Makefile Makefile_ppc
     2.修改Makefile_ppc
       第63行 在-DHAVE_DLFCN_H后面添加 -arch ppc
       第173行 修改为SHARED_LDFLAGS=-arch ppc -dynamiclib
     3.生成ppc的静态连接库
       运行命令make -f Makefile_ppc
       生成的libcrypto.a和libssl.a就是i386的静态库
     4.运行命令
       mv libcrypto.a libcrypto_ppc.a
       mv libssl.a libssl_ppc.a
  1.3生成x86-64的静态链接库
     1.复制文件cp Makefile Makefile_x86-64
     2.修改Makefile_x86-64
       第63行 在-DHAVE_DLFCN_H后面添加 -arch x86-64
       第173行 修改为SHARED_LDFLAGS=-arch x86-64 -dynamiclib
     3.生成x86-64的静态连接库
       运行命令make -f Makefile_x86-64
       生成的libcrypto.a和libssl.a就是i386的静态库
     4.运行命令
       mv libcrypto.a libcrypto_x86-64.a
       mv libssl.a libssl_x86-64.a
  1.4生成ppc64的静态链接库
     1.复制文件cp Makefile Makefile_ppc64
     2.修改Makefile_ppc64
       第63行 在-DHAVE_DLFCN_H后面添加 -arch ppc64
       第173行 修改为SHARED_LDFLAGS=-arch ppc64 -dynamiclib
     3.生成ppc64的静态连接库
       运行命令make -f Makefile_ppc64
       生成的libcrypto.a和libssl.a就是i386的静态库
     4.运行命令
       mv libcrypto.a libcrypto_ppc64.a
       mv libssl.a libssl_ppc64.a
2.生成i386的openvpnc openvpnc_loader,ppc的openvpnc openvpnc_loader,x86-64的openvpnc openvpnc_loader,ppc64的openvpnc

openvpnc_loader
  2.1 生成i386的openvpnc openvpnc_loader
     在gcc后面加参数 -arch i386 -mmacosx-version-min=10.4,链接改为libcrypto_i386.a和libssl_i386.a,生成文件改为openvpnc_i386

openvpnc_loader_i386
  2.2 生成ppc的openvpnc openvpnc_loader
     在gcc后面加参数 -arch ppc -mmacosx-version-min=10.4,链接改为libcrypto_ppc.a和libssl_ppc.a,生成文件改为openvpnc_ppc

openvpnc_loader_ppc
  2.3 生成x86-64的openvpnc openvpnc_loader
     在gcc后面加参数 -arch x86-64 -mmacosx-version-min=10.4,链接改为libcrypto_x86-64.a和libssl_x86-64.a,生成文件改为

openvpnc_x86-64 openvpnc_loader_x86-64
  2.4 生成ppc64的openvpnc openvpnc_loader
     在gcc后面加参数 -arch ppc64 -mmacosx-version-min=10.4,链接改为libcrypto_ppc64.a和libssl_ppc64.a,生成文件改为

openvpnc_ppc64 openvpnc_loader_ppc64
3.指定最低运行的版本
  -mmacosx-version-min=10.4,指定支持的最低的mscos的版本,目前支持的最低版本是10.4
4.运行命令把几个版本合成一个binary.
  lipo -create openvpnc_i386 openvpnc_ppc openvpnc_ppc64 openvpnc_x86_64 -output openvpnc
  使用lipo命令把i386,ppc,ppc64和x86-64各种架构的binary合成一个通用的binary.
  使用file命令可以查看生成的binary支持的架构的信息。
  file openvpnc
  openvpnc: Mach-O universal binary with 4 architectures
  openvpnc (for architecture i386):       Mach-O executable i386
  openvpnc (for architecture ppc7400):    Mach-O executable ppc
  openvpnc (for architecture ppc64):      Mach-O 64-bit executable ppc64
  openvpnc (for architecture x86_64):     Mach-O 64-bit executable x86_64

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mounter625

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值