有一个程序是基于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