主要记录在Linux上交叉编译的必要信息
交叉编译主要需要配置
1 编译器
2 SDK
3 编译目标
编译器主要有clang和gcc
clang包括clang和clang++
gcc本身不支持交叉编译 需要安装对应的交叉编译版本 例如aarch64目标为gcc-8-aarch64-linux-gnu和g++-8-aarch64-linux-gnu
在cmake上需要配置
CMAKE_C_COMPILER和CMAKE_CXX_COMPILER 这里需要配置的是全路径
另外需要配置CMAKE_C_FLAGS和CMAKE_CXX_FLAGS
添加 --target=<target> --sysroot=<SDK>
另外clang还要添加 -fuse-ld=lld
CMAKE_CROSSCOMPILING的值设置为True
另外,最好设置CMAKE_SYSTEM_PROCESSOR和CMAKE_SYSTEM_NAME
SDK获取
一个简单有效的方法就是从对应系统中拷贝出来
还有一个方法是用chromium的脚本从debian下载。 当然这个脚本需要修改一下
有效的target
gcc可以通过aarch64-linux-gnu-ld --target-help命令查看
clang的值为<arch>-<kernel>[-<vendor>] 例如arm64-linux-gnueabihf和arm64-linux
clang和gcc
都会自动配置
CMAKE_ADDR2LINE
CMAKE_AR
CMAKE_CXX_COMPILER_AR
CMAKE_CXX_COMPILER_RANLIB
CMAKE_C_COMPILER_AR
CMAKE_C_COMPILER_RANLIB
CMAKE_NM
CMAKE_OBJCOPY
CMAKE_OBJDUMP
CMAKE_RANLIB
CMAKE_READELF
CMAKE_STRIP
CMAKE_LINKER ---- gcc会自动生成, clang需要使用-fuse-ld=lld参数进行指定
CMAKE_DLLTOOL ---- clang会自动生成