arm64-v8a 静态成员模板 undefined reference to

谷歌发布新包需64位的so,在Application.mk中添加arm64 - v8a和x86_64平台后,项目编译不过。经查找,可能是模板分离编译导致函数无法展开,通过在.h下#include cpp文件解决部分问题。之后又出现模板多重定义问题,将include函数变为inline写到类里可解决。

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

谷歌发布新包需要64位的so

  Application.mk 中 APP_ABI := armeabi armeabi-v7a x86 x86_64 arm64-v8a 添加了 arm64-v8a 和 x86_64 两个平台。

  之前项目中使用了模板 在 .h 文件中定义了 数据,.cpp 中实现了具体的功能。但是 上述新添加的平台编译不过。

  后经查找, 有可能是 因为模板分离编译导致函数无法展开。

  在 .h 下面 #include cpp 文件, 解决一部分。

  后又出现模板多重定义问题, 是因为static 成员函数 被 #include 多次导致 多次重复定义。

  解决办法: 把include 函数变为inline 写到类里面即解决。

  或有其他的解决方法。

转载于:https://www.cnblogs.com/zijian-yang/p/11165467.html

cmake_minimum_required(VERSION 3.14) project(SmartEQ_Android_SO LANGUAGES CXX C) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_C_STANDARD 99) set(CMAKE_SYSTEM_NAME Android) set(CMAKE_SYSTEM_VERSION 31) # 或者您需要的 Android API 级别 set(CMAKE_ANDROID_ARCH_ABI arm64-v8a) # 设置为 arm64-v8a find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) # 添加头文件路径 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/FFTW2/HeadFile/fftw ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/block ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/gsl ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/interpolation ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/linalg ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/view ${CMAKE_CURRENT_SOURCE_DIR}/EigenLib ${CMAKE_CURRENT_SOURCE_DIR}/ ) file(GLOB FFTW2_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/FFTW2/SourceFile/fftw/*.c ${CMAKE_CURRENT_SOURCE_DIR}/*.c ) file(GLOB GSL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/GSL/SourceFile/interpolation/*.c ${CMAKE_CURRENT_SOURCE_DIR}/GSL/SourceFile/linalg/*.c ${CMAKE_CURRENT_SOURCE_DIR}/GSL/SourceFile/view/*.c ) ## 声明并链接自定义库 libFFTW_GSL_SO.so ## -------------------------------------------- #if(ANDROID) # # Android 平台:动态处理 ABI 和多架构 # set(ANDROID_ABIS arm64-v8a) # foreach(abi ${ANDROID_ABIS}) # if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/FFTWGSL/${abi}/libFFTW_GSL_SO.so) # # 声明 IMPORTED 库目标 # add_library(FFTW_GSL_SO_${abi} SHARED IMPORTED) # set_target_properties(FFTW_GSL_SO_${abi} PROPERTIES # IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/FFTWGSL/${abi}/libFFTW_GSL_SO.so # ) # endif() # endforeach() #else() # # 非 Android 平台(如 Linux) # add_library(FFTW_GSL_SO SHARED IMPORTED) # set_target_properties(FFTW_GSL_SO PROPERTIES # IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/FFTWGSL/arm64-v8a/libFFTW_GSL_SO.so # ) #endif() add_library(SmartEQ_Android_SO SHARED smarteq_android_so.cpp smarteq_android_so.h ${FFTW2_SOURCES} ${GSL_SOURCES} fftw_gsl_so.h fftw_gsl_so.cpp ) target_include_directories(SmartEQ_Android_SO PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/FFTW2/HeadFile/fftw ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/block ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/gsl ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/interpolation ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/linalg ${CMAKE_CURRENT_SOURCE_DIR}/GSL/HeadFile/view ${CMAKE_CURRENT_SOURCE_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/EigenLib # ${CMAKE_CURRENT_SOURCE_DIR}/GSL/SourceFile/interpolation # ${CMAKE_CURRENT_SOURCE_DIR}/GSL/SourceFile/linalg # ${CMAKE_CURRENT_SOURCE_DIR}/GSL/SourceFile/view ) ## 链接依赖库 #target_link_libraries(SmartEQ_Android_SO PRIVATE # Qt${QT_VERSION_MAJOR}::Core # FFTW_GSL_SO_${ANDROID_ABI} # Android 平台按 ABI 链接 #) #target_include_directories(SmartEQ_Android_SO PRIVATE # ${CMAKE_CURRENT_SOURCE_DIR}/FFTWGSL/arm64-v8a #) target_link_libraries(SmartEQ_Android_SO PRIVATE Qt${QT_VERSION_MAJOR}::Core) target_compile_definitions(SmartEQ_Android_SO PRIVATE SMARTEQ_ANDROID_SO_LIBRARY) 为什么会爆以上的错误
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值