# openssl_for_ios_and_android
**Repository Path**: mirrors_donglua/openssl_for_ios_and_android
## Basic Information
- **Project Name**: openssl_for_ios_and_android
- **Description**: OpenSSL Library for iOS and Android
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2020-08-08
- **Last Updated**: 2026-03-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# OpenSSL & cURL Library for iOS and Android
| library | version | platform support | arch support | pull commit |
| openssl | 1.1.0f | ios | armv7s armv7 i386 x86_64 arm64 | aae1672 |
| | android | armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64 | aae1672 |
| curl | 7.53.1 | ios | armv7s armv7 i386 x86_64 arm64 | aae1672 |
| | android | armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64 | aae1672 |
## English
## Downloads
If you do not want to build it by yourself, you could download our prebuilt library from [there](https://github.com/leenjewel/openssl_for_ios_and_android/releases/tag/20170105)
## OpenSSL Version
This a static library compile from openssl and cURL for iOS and Android.
- ~~[openssl-1.0.2c.tar.gz](https://www.openssl.org/source/openssl-1.0.2c.tar.gz)~~
- [openssl-1.1.0f.tar.gz](https://www.openssl.org/source/openssl-1.1.0f.tar.gz)
- [https://github.com/openssl/openssl](https://github.com/openssl/openssl)
## cURL Version
- ~~[curl-7.47.1.tar.gz](https://curl.haxx.se/download/curl-7.47.1.tar.gz)~~
- [curl-7.53.1.tar.gz](https://curl.haxx.se/download/curl-7.53.1.tar.gz)
- [https://github.com/curl/curl](https://github.com/curl/curl)
## Android NDK Version
- ~~[android-ndk-r13b](https://dl.google.com/android/repository/android-ndk-r13b-darwin-x86_64.zip)~~
- [android-ndk-r14b](https://dl.google.com/android/repository/android-ndk-r14b-darwin-x86_64.zip)
## How to build
### For iOS
Copy `openssl-1.1.0f.tar.gz` to `tools` file folder and run
```
cd tools
sh ./build-openssl4ios.sh
```
Copy `curl-7.53.1.tar.gz` to `tools` file folder and run
```
cd tools
sh ./build-curl4ios.sh
```
### For Android
Set ENV `NDK_ROOT`
```
cd tools
sh ./build-openssl4android.sh
```
You could build it with ABI like
```
cd tools
sh ./build-openssl4android.sh android # for armeabi
sh ./build-openssl4android.sh android-armeabi #for armeabi-v7a
sh ./build-openssl4android.sh android64-arm64 #for arm64_v8a
sh ./build-openssl4android.sh android-x86 #for x86
sh ./build-openssl4android.sh android64 #for x86_64
sh ./build-openssl4android.sh mips #for mips
sh ./build-openssl4android.sh mips64 #for mips64
```
> **You must build openssl first**
>
> **else cURL HTTPS is disable (without ssl)**
OpenSSL for Android is build with `libz` support using dynamic
link. `libz` is publically provided by Android system.
```
sh ./build-curl4android.sh
```
You could build it with ABI like
```
cd tools
sh ./build-curl4android.sh android # for armeabi
sh ./build-curl4android.sh android-armv7 #for armeabi-v7a
sh ./build-curl4android.sh android64-arm64 #for arm64_v8a
sh ./build-curl4android.sh android-x86 #for x86
sh ./build-curl4android.sh android-x86_64 #for x86_64
sh ./build-curl4android.sh mips #for mips
sh ./build-curl4android.sh mips64 #for mips64
```
## How to use
### For iOS
Copy `lib/libcrypto.a` and `lib/libssl.a` and `lib/libcurl.a` to your project.
Copy `include/openssl` folder and `include/curl` folder to your project.
Add `libcrypto.a` and `libssl.a` and `libcurl.a` to `Frameworks` group and add them to `[Build Phases] ====> [Link Binary With Libraries]`.
Add openssl include path and curl include path to your `[Build Settings] ====> [User Header Search Paths]`
### About "\_\_curl\_rule\_01\_\_ declared as an array with a negative size" problem
When you build cURL for arm64 you will get this error.
You need to change `curlbuild.h` from :
```c
#define CURL_SIZEOF_LONG 4
```
to :
```c
#ifdef __LP64__
#define CURL_SIZEOF_LONG 8
#else
#define CURL_SIZEOF_LONG 4
#endif
```
### For Android
Copy `lib/armeabi` folder and `lib/armeabi-v7a` folder and `lib/x86` to your android project `libs` folder.
Copy `include/openssl` folder and `include/curl` to your android project.
#### Android Makefile
Add openssl include path to `jni/Android.mk`.
```
#Android.mk
include $(CLEAR_VARS)
LOCAL_MODULE := curl
LOCAL_SRC_FILES := Your cURL Library Path/$(TARGET_ARCH_ABI)/libcurl.a
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/Your Openssl Include Path/openssl \
$(LOCAL_PATH)/Your cURL Include Path/curl
LOCAL_STATIC_LIBRARIES := libcurl
LOCAL_LDLIBS := -lz
```
### CMake
Define `ssl`, `crypto`, `curl` as *STATIC IMPORTED* libraries.
```
add_library(crypto STATIC IMPORTED)
set_target_properties(crypto
PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcrypto.a)
add_library(ssl STATIC IMPORTED)
set_target_properties(ssl
PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libssl.a)
add_library(curl STATIC IMPORTED)
set_target_properties(curl
PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcurl.a)
```
Then link these libraries with your target, e.g.
```
target_link_libraries( # Specifies the target library.
native-lib
curl
ssl
crypto
)
```
## 中文
这是一个适用于 iOS 平台和 Android 平台的 Openssl 静态链接库。基于 openssl-1.1.0f 版本编译生成。
后来又加入了适用于 iOS 平台和 Android 平台且支持 SSL 的 cURL 静态链接库。基于 curl-7.53.1 版本编译生成。
## 下载
如果你不想自己构建,那么你可以使用我们已经预先构建好的版本,[请在这里下载](https://github.com/leenjewel/openssl_for_ios_and_android/releases/tag/20170105)
## 在 iOS 工程中使用
将 `lib/libcrypto.a` 和 `lib/libssl.a` 还有 `lib/libcurl.a` 三个静态链接库文件拷贝到你的 iOS 工程下面合适的位置。
将 `include/openssl` 文件夹和 `include/curl` 文件夹拷贝到你的 iOS 工程下面合适的位置。注意,所有的头文件均要放置到 `openssl` 文件夹下,不要随意更改文件夹名称。
将 `libcrypto.a` 和 `libssl.a` 还有 `lib/libcurl.a` 三个静态链接库文件通过`[Build Phases] ====> [Link Binary With Libraries]`引入你的 iOS 工程。
将包含所有头文件的 `openssl` 文件夹和含有头文件的 `curl` 文件夹设置到头文件搜索路径中。即在 `[Build Settings] ====> [User Header Search Paths]` 中设置好。
### 关于 "\_\_curl\_rule\_01\_\_ declared as an array with a negative size" 的问题解决办法
当你在 iOS 的 arm64 架构环境下编译 cURL 静态库时会遇到这个问题。解决的办法是修改 `curlbuild.h` 头文件,将下面这行 :
```c
#define CURL_SIZEOF_LONG 4
```
改成 :
```c
#ifdef __LP64__
#define CURL_SIZEOF_LONG 8
#else
#define CURL_SIZEOF_LONG 4
#endif
```
## 在 Android 工程中使用
将 `lib/armeabi` 和 `lib/armeabi-v7a` 还有 `lib/x86` 文件夹拷贝到你的 Android 工程下面的 `libs` 文件夹中。
将 `include/openssl` 文件夹和 `include/curl` 文件夹拷贝到你的 Android 工程下面合适的位置。注意,所有的头文件均要放置到 `openssl` 文件夹下,不要随意更改文件夹名称。
### Android Makefile 系统
修改 `jni/Android.mk` 文件,将头文件路径加入到搜索路径中,例如:
```
# Android.mk
include $(CLEAR_VARS)
LOCAL_MODULE := curl
LOCAL_SRC_FILES := Your cURL Library Path/$(TARGET_ARCH_ABI)/libcurl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := curl
LOCAL_SRC_FILES := Your cURL Library Path/$(TARGET_ARCH_ABI)/libcurl.a
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/Your Openssl Include Path/openssl \
$(LOCAL_PATH)/Your cURL Include Path/curl
LOCAL_STATIC_LIBRARIES := libcurl
LOCAL_LDLIBS := -lz
```
### CMake 系统
把 `ssl`, `crypto`, `curl` 定义成 *STATIC IMPORTED* 库。
```
add_library(crypto STATIC IMPORTED)
set_target_properties(crypto
PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcrypto.a)
add_library(ssl STATIC IMPORTED)
set_target_properties(ssl
PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libssl.a)
add_library(curl STATIC IMPORTED)
set_target_properties(curl
PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcurl.a)
```
把它们和你的目标链接,如:
```
target_link_libraries( # Specifies the target library.
native-lib
curl
ssl
crypto
)
```
## Reference / 参考资料
>[《How-To-Build-openssl-For-iOS》](http://www.cvursache.com/2013/08/13/How-To-Build-openssl-For-iOS/)
>
>[《Compiling the latest OpenSSL for Android》](http://stackoverflow.com/questions/11929773/compiling-the-latest-openssl-for-android)
>
>[《在 Cocos2d-x 中使用 OpenSSL》](http://leenjewel.github.io/blog/2015/06/30/zai-cocos2d-x-zhong-shi-yong-openssl/)
>
>[《using curl on iOS, I am unable to link with multiple architectures, CurlchkszEQ macro failing》](http://stackoverflow.com/questions/21681954/using-curl-on-ios-i-am-unable-to-link-with-multiple-architectures-curlchkszeq)
>
>[《porting libcurl on android with ssl support》](http://stackoverflow.com/questions/11330180/porting-libcurl-on-android-with-ssl-support)