本文主要介绍如何在Mac OSX平台上使用cmake对libx265进行交叉编译,生成能在Android平台下使用的动态库so文件
准备工作
- 下载libx265源码并解压,我使用的版本是2.4 下载传送门
- 下载Android NDK编译链,我使用的NDK版本号是android-ndk-r10e
- 确保本机已经安装cmake
编译流程
- 进入libx265下的build/arm-linux/目录
- 使用文本编辑crosscompile.cmake文件,按照如下进行设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21set(CMAKE_SYSTEM_NAME Android)
#此处设置Android的API版本
set(CMAKE_ANDROID_API 9)
#此处设置Android的ABI,如armeabi、armeabi-v7a、x86等
set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
#此处设置Android的NDK路径
set(CMAKE_ANDROID_NDK "/android/android-ndk-r10e")
#此处设置Android的系统目录,与ABI相关,如$NDK/platforms/android-9/arch-arm、/platforms/android-9/arch-x86
set(CMAKE_SYSROOT "/android/android-ndk-r10e/platforms/android-9/arch-arm")
set(CMAKE_ANDROID_STL_TYPE "c++_static")
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_STANDARD 11)
include_directories(../../source) - 控制台进入到libx265/build/arm-linux/下,执行
1
cmake -DCMAKE_TOOLCHAIN_FILE=crosscompile.cmake -G "Unix Makefiles" ../../source && ccmake ../../source
- 上面命令执行之后会对libx265进行基本的配置,如下图
- 配置完成之后会弹出cmake gui界面,可以对libx265进行配置,此处我们不进行修改,直接按c键进行配置,然后再按g键进行生成配置文件,生成之后cmake会自动退出,如下图
- 控制台执行make命令,开始交叉编译,如图
- 编译成功后可以在libx265/build/arm-linux/目录下找到libx265.a和libx265.so文件,至此大功告成
编译过程中可能出现的问题
posix_memalign函数找不到
1 | 'posix_memalign' was not declared in this scope |
解决方法:
文本编辑器打开source/common/common.cpp文件,找到如下代码段
1 | void *x265_malloc(size_t size) |
修改为
1 | void *x265_malloc(size_t size) |
再次执行make即可
=======================
-lpthread找不到
1 | error: cannot find -lpthread |
解决方法:
文本编辑器打开source/CMakeLists.txt文件,全局搜索关键字-lpthread,找到如下代码段
1 | 找到 list(APPEND PLATFORM_LIBS pthread) 改为 list(APPEND PLATFORM_LIBS) |
再次执行make即可