Mac上使用独立工具链跨平台编译

本文介绍如何在Mac上使用Android独立工具链进行交叉编译,以生成适用于Android 5.0及以上版本的.so文件。文章详细展示了如何通过修改CMakeLists.txt文件来配置编译环境,包括设置必要的编译标志、指定工具链路径、添加链接库等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 独立工具链
cmake使用独立工具链交叉编译可在android中运行的so包
如果在mac上使用独立编译链上述链接会遇到编译错误, 需要修改CMakeLists.txt文件为如下内容

cmake_minimum_required(VERSION 3.4.1)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -shared")

# Android 5.0 以上需要在此处设置 PIE
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie")

# 配置使用 NDK Standalone Toolchain 编译
set(NDK_STANDALONE_TOOLCHAIN_HOME /tmp/ndk-hm)
set(NDK_STANDALONE_TOOLCHAIN /tmp/ndk-hm/arm-linux-androideabi)
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 23)
set(CMAKE_C_COMPILER ${NDK_STANDALONE_TOOLCHAIN_HOME}/bin/clang)
set(CMAKE_CXX_COMPILER ${NDK_STANDALONE_TOOLCHAIN_HOME}/bin/clang++)
set(CMAKE_FIND_ROOT_PATH ${NDK_STANDALONE_TOOLCHAIN})

# 使用 NDK 提供的头文件
add_definitions("--sysroot=${NDK_STANDALONE_TOOLCHAIN_HOME}/sysroot")

add_library(myso SHARED CTest.c)

set_target_properties(myso
                      PROPERTIES
                      LIBRARY_OUTPUT_DIRECTORY
                      "${CMAKE_CURRENT_SOURCE_DIR}/lib")


include_directories(/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/include /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/include/darwin)
# include_directories(/Users/zhumingren/Library/Android/sdk/ndk-bundle/platforms/android-23/arch-arm/usr/include)

target_link_libraries(myso
                     log)

文件添加了NDK_STANDALONE_TOOLCHAIN_HOME变量, 添加了编译参数-shared

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值