MAC 使用在guanzhi/GmSSL下载的C语言库,对其进行编译,使其生成对应的静态库。
1、下载下来之后,cd 到该文件路径,使用./config查看其所适用的环境,会出现以下问题!
解决方法:1、修改该目录下Configure、test/build.info、test/run_tests.pl中的内容`(用文本编辑器打开)`
use if $^O ne "VMS", "File::Glob" => qw/glob/;
改为
use if $^O ne "VMS", "File::Glob" => qw/:glob/;
2、两次make,会发现可以编译通过,如果过程发现无法通过rate_test测试,修改test/sm9test.c中的内容,然后两次编译,修改如下
if (!rate_test()) {
printf("sm9 rate pairing test failed
");
err++;
} else
printf("sm9 rate pairing test passed
");
#endif
编译模拟器静态库
- 上述问题解决后,使用终端执行命令编译MAC版本【需要进行该文件所在文件夹才可以编译】
./config
该命令是配置编译环境
编译之前先设置一下变量
export KERNEL_BITS=64 指定选择x86架构,生成为MAC端的静态库
make 生成对应的.a静态库,【darwin64-x86_64-cc 仅支持OS】
make test 进行编译
sudo make install 编译安装。
编译完成即可生成对应的.a文件
引发问题:
(1). Building for iOS Simulator, but the linked library ‘xxxxxx.a‘ was built for iOS.
解决方法:Xcode -> File -> Workspace Settings -> Build System -> Legacy Build System
(2). 模拟器上运行报名:Undefined symbols for architecture x86_64
即使使用lipo -info + .a库路径 查询出来虽然是x86_64 仍然报错
(3). 打出来的.a只支持MAC上运行,并无法支持模拟器运行,请知道的大佬指教
解决方法:make 之前使用先在终端执行以下命令
export KERNEL_BITS=64
arm64、armv7、armv7s、iphone模拟器静态库【如果执行make clean 报错再次编译报名,就删掉这库重新操作】
- 依次在文件夹里面执行命令
# 设置编译器
export CC="clang -arch arm64" #arm64(iphone模拟器)
#export CC="clang -arch armv7" #armv7
#export CC="clang -arch armv7s" #armv7s
#设置工具链路径
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
# 设置开发环境目录(使用的是iphone的库,根据实际修改【OSX】)
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
# export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer #模拟器
# 设置SDK(根据自己电脑进行修改版本号,路径在上一步中获取)
export CROSS_SDK=iPhoneOS14.5.sdk # 模拟器:iPhoneSimulator14.5.sdk
# 设置最小依赖版本
export IPHONEOS_DEPLOYMENT_TARGET=8.0
# 生成makefile
./Configure ios64-cross no-shared -DGMSSL_NO_TURBO
# ./Configure ios-cross no-shared -DGMSSL_NO_TURBO #armv7 armv7s
# ./Configure iphoneos-cross no-shared -DGMSSL_NO_TURBO #模拟器
make