编译与安装
在Linux和Mac下的编译和安装
./config
make
make test
sudo make install
在Window下的编译和安装
安装ActivePerl和Visual Studio,以管理员身份打开Visual Studio Tools下的Developer Command Prompt控制台并运行:
perl Configure VC-WIN32
nmake
nmake install
下面是一些常见的编译错误及原因:
- 安装最新的Visual Studio版本,不要使用Visual C++ 6、Visual Studio 2008。
- 确保从一份干净的(没有已经编译出来的对象文件或汇编文件)最新Master分支源代码开始编译。
- 编译系统没有找到
nmake
。实际上nmake
是Visual Studio自带的工具,不需要单独安装。编译系统无法找到nmake
的原因是没有在Visual Studio的命令行环境下执行编译指定。 - 无法执行
nmake install
。这个命令需要以管理员的身份执行。 - 对象文件(
.obj
)和目标平台不一致,通常是由于在Visual Studio的32位控制台下执行perl Configure VC-WIN64A
;或者在Visual Studio的64位控制台下执行perl Configure VC-WIN32
导致的。
编译Android目标文件
针对Android/ARM目标平台,需要先安装Android SDK/NDK。设置交叉编译环境后,可以直接用GmSSL内置的编译系统进行编译。下面的脚本给出了交叉编译的示例,需要根据安装的SDK位置及预计的平台编号修改ANDROID_PATH
和PLATFORM_VERSION
的值。
#!/bin/bash
ANDROID_PATH=/path/to/android/sdf/
PLATFORM_VERSION=22
MAKE_TOOLCHAIN=$ANDROID_PATH/sdk/ndk-bundle/build/tools/make-standalone-toolchain.sh
export TOOLCHAIN_PATH=$ANDROID_PATH/android-toolchain-arm
$MAKE_TOOLCHAIN --arch=arm --platform=android-$PLATFORM_VERSION --install-dir=$TOOLCHAIN_PATH
export MACHINE=armv7
export SYSTEM=android
export ARCH=arm
export CROSS_SYSROOT=$TOOLCHAIN_PATH/sysroot
export TOOL_BASENAME=$TOOLCHAIN_PATH/bin/arm-linux-androideabi
export CC=$TOOL_BASENAME-gcc
export CXX=$TOOL_BASENAME-g++
export LD=$TOOL_BASENAME-ld
export LINK=$CXX
export AR=$TOOL_BASENAME-ar
export RANLIB=$TOOL_BASENAME-ranlib
export STRIP=$TOOL_BASENAME-strip
./config
make
编译完成后,可以生成面向Android目标平台的二进制库和gmssl
可执行程序。
如需调用GmSSL的Java API,可以参考Android NDK的示例。
编译iPhone OS目标文件
export CC=clang
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export CROSS_SDK=iPhoneOS.sdk
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
./Configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64
make
编译Java接口
由于GmSSL编译脚本还不能实现在所有操作系统上自动编译Java接口代码,因此编译脚本中默认没有启用Java接口的编译。
开启方式如下:
在源代码根目录下找到Configure
文件,找到
$config{dirs} = [ "crypto", "ssl", "engines", "apps", "util", "tools", "fuzz", "test" ];
这一行,并将其修改为
$config{dirs} = [ "crypto", "ssl", "engines", "apps", "util", "tools", "fuzz", "test", "java" ];
重新编译,则可以自动编译java
目录下的C代码和Java代码,并生成libgmssljni
动态库和GmSSL.class
。
这个模块的编译目前在Mac下可以测试通过。