NDK交叉编译

实例

export ANDROID_NDK=/media/xp/data/3rd_party/25.2.9519653
rm -rf ndk_build

mkdir ndk_build
cd ndk_build

# 为了避免anaconda的库影响编译,需要把anaconda的库路径从环境变量中删除
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-11.8/bin
# glog 需要gflags库,gflags有多个版本,指定为手动编译安装的版本,在/usr/local/lib下
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH


cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
	-DANDROID_ABI="arm64-v8a" \
	-DANDROID_NDK=$ANDROID_NDK \
	-DANDROID_PLATFORM=android-29 \
    -DANDROID_STL=c++_static \
	..

make -j8

CMakeLists的跨平台

android平台的库和linux平台的库大多数都不一样,需要用ndk编到android上用的话在本地也需要一份去做编译连接。在cmakelists文件中可以设置不同平台找不同路径下的库,这样就可以指定编译工具链去编译不同平台的工程了。

if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")

    add_definitions(-DMY_LINUX_SYSTEM)
    find_package(OpenCV REQUIRED)
    list(APPEND DEP_LIBS ${OpenCV_LIBS})
    include_directories(${CMAKE_CURRENT_LIST_DIR}/tnn/include)
    add_library(tnn SHARED IMPORTED)
    FIND_PACKAGE(yaml-cpp REQUIRED)
    list(APPEND DEP_LIBS ${YAML_CPP_LIBRARIES})
    INCLUDE_DIRECTORIES(${YAML_CPP_INCLUDE_DIR})
    set_target_properties(tnn PROPERTIES IMPORTED_LOCATION
            ${CMAKE_CURRENT_LIST_DIR}/tnn/lib/libTNN.so)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
   
    # add_definitions(-DMY_LINUX_SYSTEM)
    
    set(OpenCV_DIR "/media/xp/data/3rd_party/android_opencv481/install/sdk/native/jni/abi-arm64-v8a")
    find_package(OpenCV  REQUIRED)
    include_directories(${OpenCV_INCLUDE_DIRS})
    include_directories(${CMAKE_CURRENT_LIST_DIR}/tnn_android/include)
    
    set(yaml-cpp_DIR "/home/xp/3rd_party/yaml-cpp/ndk_build/install/lib/cmake/yaml-cpp")
    find_package(yaml-cpp REQUIRED)
    list(APPEND DEP_LIBS ${YAML_CPP_LIBRARIES})

    list(APPEND DEP_LIBS ${CMAKE_CURRENT_LIST_DIR}/tnn_android/arm64-v8a/libTNN.so ${OpenCV_LIBS})
    
endif()


NDK 编译三方库

以yaml-cpp库为例。从github上下载代码仓库,进入根目录,采用NDK交叉编译,并且用CMAKE_INSTALL_PREFIX指定安装路径

export ANDROID_NDK=/media/xp/data/3rd_party/25.2.9519653

rm -rf ndk_build

mkdir ndk_build
cd ndk_build

cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
	-DANDROID_ABI="arm64-v8a" \
	-DANDROID_NDK=$ANDROID_NDK \
	-DANDROID_PLATFORM=android-29 \
    -DANDROID_STL=c++_static \
	-DYAML_BUILD_SHARED_LIBS=ON \
	-DCMAKE_INSTALL_PREFIX=./install \
	..

make -j$(nproc)

参考链接

https://blog.csdn.net/qq_38410730/article/details/103622813
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值