Date: 2018.9.30
1、前言
同一套库代码往往需要在不同体系架构或系统上的机器和设备上编译和运行,这就需要我们熟悉不同平台上的编译方法以及测试方法,本文旨在讲述多平台编译方法以及makefile自动化编译的总结。
2、多平台编译之Windows平台
体系架构:Intel x86
系统内核:Windows
系统类型:win32,x64
Windows平台编译方法:通过批处理脚本命令行编译VS工程
3、多平台编译之Linux平台
体系架构:Intel x86
系统内核:Linux
系统类型:linux32,linux64
Linux平台编译方法:makefile工程编译模板
4、多平台编译之Mac平台
体系架构:Intel x86
系统内核:Darwin
系统类型:mac32,mac64
Mac平台编译方法:mac和ios通用编译环境
5、多平台编译之IOS平台
体系架构:armv7,armv7s,arm64
系统内核:Darwin
系统类型:ios32,ios64
ios平台编译方法:mac和ios通用编译环境
6、多平台编译之Android平台
体系架构:arm,x86,mips
系统内核:Linux
系统类型:armeabi,armeabi-v7a,arm64-v8a,x86,x86-64,mips,mips64
Android平台编译方法:Android平台通用编译环境
Android平台真机测试方法:android真机测试方法
7、多平台编译之ARM平台
体系架构:arm
系统内核:Linux
系统类型:armv7,armv8
ARM平台编译方法:makefile工程编译模板
ARM平台测试脚本:编解码器一致性验证和性能测试自动化脚本
8、多平台编译之NACL平台
参考:
https://blog.gmem.cc/chrome-native-client-study-note
http://www.iteye.com/news/26298
http://www.360doc.com/content/15/0127/13/9200790_444163734.shtml#
NACL介绍:Native Client
NaCl是一种在浏览器中安全的与执行平台无关的、不受信任代码的开源沙盒技术,它允许计算密集型、交互性的实时Web应用有效的利用机器的物理性能,并同时保证安全性。NaCl本质上是一个进程内PPAPI插件。
一个NaCl应用程序包含:JavaScript、HTML、CSS、以及一个NaCl模块。目前NaCl SDK支持的语言主要是C和C++。
NaCl SDK是用于开发NaCl可执行文件(nexe)的工具包。由一系列GNU工具链组成,包括 gcc, binutils、gdb等。
体系架构:x86或arm
NACL平台编译方法:
(1)准备工作:
安装NACL sdk: https://developer.chrome.com/native-client/sdk/download
https://maxwoods.ctfile.com/fs/GiQ148351151
https://maxwoods.ctfile.com/fs/r2D150855035
并配置系统变量NACL_SDK_ROOT路径为NACL SDK的pepper版本路径。
安装python并把python的安装目录添加到path系统变量中。
(2)编写makefile采用工具链进行编译:
上层makefile:
${NACL_SDK_ROOT}\tools\make.exe -C dec_lib -f Makefile PLATFROM=nacl_32
make.bat:
@%NACL_SDK_ROOT%\tools\make.exe %*
dec_lib目录下的Makefile部分,其他部分与普通makefile一样:
# x86_64
ifeq ($(strip $(PLATFORM)),nacl_64)
CROSS=x86_64
endif
# i686
ifeq ($(strip $(PLATFORM)),nacl_32)
CROSS=i686
endif
ARCH=x86
CPLATFORM=glibc
VALID_TOOLCHAINS := glibc pnacl win newlib arm
include ${NACL_SDK_ROOT} /tools/common.mk
# tool configure
CC := ${NACL_SDK_ROOT}/toolchain/win_${ARCH}_${CPLATFORM}/bin/${CROSS}-nacl-gcc.exe
LD := ${NACL_SDK_ROOT}/toolchain/win_${ARCH}_${CPLATFORM}/bin/${CROSS}-nacl-ld.exe
AR := ${NACL_SDK_ROOT}/toolchain/win_${ARCH}_${CPLATFORM}/bin/${CROSS}-nacl-ar.exe
AS := ${NACL_SDK_ROOT}/toolchain/win_${ARCH}_${CPLATFORM}/bin/${CROSS}-nacl-as.exe
RM := rm -f
9、makefile自动化编译总结
(1)makefile中使用shell命令:
$(shell chmod +x ./gas-preprocesor.pl)
(2)makefile中的几种用法:
OBJT=\$(addprefix $(TMP_DIR)/, $(notdir $(OBJS)))
$(@F) 等效于 $(notdir $@) 获取实际文件名
$(filter %.a, $(LIB))
(3)makefile工程编译模板
https://blog.csdn.net/SoaringLee_fighting/article/details/82594605
持续更新ing
THE END!