首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android studio CMake不会将预构建库链接到主.so文件。

Android Studio是一款用于开发Android应用程序的集成开发环境(IDE)。CMake是一种跨平台的构建工具,用于管理和构建C/C++项目。在Android开发中,有时候需要使用C/C++编写的预构建库,然后将其链接到主.so文件中,以供Android应用程序使用。

然而,有时候在使用Android Studio和CMake进行构建时,可能会遇到预构建库无法正确链接到主.so文件的问题。这可能是由于以下原因导致的:

  1. 缺少正确的CMake配置:确保在CMakeLists.txt文件中正确配置了预构建库的路径和链接信息。可以使用find_library命令来查找预构建库,并使用target_link_libraries命令将其链接到主.so文件中。
  2. 架构不匹配:预构建库和主.so文件必须是针对相同的架构构建的。确保预构建库和主.so文件都是针对相同的目标架构进行编译的,例如armeabi-v7a、arm64-v8a、x86等。
  3. 缺少依赖库:预构建库可能依赖于其他库文件,而这些库文件需要在CMake配置中正确地链接到主.so文件中。确保将所有依赖库都正确地包含在CMake配置中。
  4. 编译顺序错误:如果预构建库依赖于主.so文件中的某些函数或符号,那么预构建库必须在主.so文件之前进行链接。确保在CMake配置中正确地安排链接顺序。

针对这个问题,可以尝试以下解决方案:

  1. 检查CMake配置:确保在CMakeLists.txt文件中正确配置了预构建库的路径和链接信息。可以参考腾讯云的CMake文档(https://cloud.tencent.com/document/product/454/34738)来了解如何正确配置CMake。
  2. 检查架构匹配:确保预构建库和主.so文件都是针对相同的目标架构进行编译的。可以使用腾讯云的NDK文档(https://cloud.tencent.com/document/product/454/34737)来了解如何正确配置NDK和ABI。
  3. 检查依赖库:确保将所有依赖库都正确地包含在CMake配置中。可以使用腾讯云的CMake文档(https://cloud.tencent.com/document/product/454/34738)来了解如何正确配置依赖库。
  4. 调整编译顺序:根据预构建库和主.so文件之间的依赖关系,调整它们在CMake配置中的链接顺序。

总结起来,解决Android Studio和CMake无法正确链接预构建库到主.so文件的问题,需要仔细检查CMake配置、架构匹配、依赖库和编译顺序等方面的设置。通过正确配置这些参数,可以确保预构建库能够成功链接到主.so文件中,从而使Android应用程序能够正常使用预构建库的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android Studio 2.2 Native 开发新特性

二、将现有 Native 代码链接到 Android Studio 项目 考虑到 ndk-build 构建方式已经有很大的使用量,Google 支持在 Android Studio 使用 ndk-build...在指定额外参数时,Gradle 将采用默认配置完成 Native 构建,例如 Gradle 将告知 ndk-build 构建所有 ABI 的 .so (即便已经在 Application.mk....])** 添加一个 Native 。需指定的名字(唯一识别一个,也是 .so 文件的命名来源。这里与 ndk-build 一致)和源文件相对路径列表。...Android Studio 会将这里列出的所有源文件添加到 Project 选项卡的 Android/Module/cpp 分组里。...这里的名称参数与在 Android.mk 添加的 LOCAL_LDLIBS 参数一致,可用的构建Android 版本有关(详见参考资料 5)。 6.

1.6K11

Android NDK cmake编译方式(六)

虽然名字中含有"make",但是CMake和Unix上常见的“make”系统是分开的,而且更为高级 Android Studio 如何使用 CMake Android studio 默认下载的cmake...CMake verifies that the library exists before # completing its build. # 搜索指定的构建,并将该路径存储为一个变量。...#指定应该链接到你的目标。您可以链接多个,比如在这个构建脚本中定义的构建的第三方或系统。...add_library 指令 add_library():用于将一组源文件编译生成一个文件,并保存为 libname.so (lib 前缀是生成文件CMake自动添加上去的)。...可传入多个源文件,其语法为:add_library(libname SHARED | STATIC | MODULE source)。 其中生成的有三种文件类型,写的话,默认为 STATIC。

2.4K61
  • Android Studio 简单生成so文件并调用「建议收藏」

    /studio/projects/add-native-code.html # 设置用来构建native library所需CMake的最小版本。...project("jnihellowrold1") # 创建并命名,将设置为静态的或者共享的,并提供源代码文件的相对路径。 # 你可以定义多个CMake会为你构建它们。...native-lib.cpp ) # 搜索指定的构建并将其路径存储为变量。 # 因为CMake会在搜索路径上默认包含系统,你只需要指定你想添加的公共的NDK。...# 在完成构建之前CMake会验证这些是否存在。 find_library( # 设置路径变量的名称。 log-lib # 指定你想让CMake定位的NDK的名称。...log ) # 指定CMake应该链接到目标。 # 你可以链接多个,例如你在这个构建脚本中定义的,预编译的三方,或者系统

    4.7K10

    Android JNI学习(二)——实战JNI之“hello world”

    如果启动此复选框,Android Studio 会将-fexceptions标志添加到模块级build.gradle文件的cppFlags中,Gradle会将其传递到CMake。...如果启用此复选框,Android Studio 会将-frtti标志添加到模块级build.gradle文件的cppFlags中,Gradle会将其传递到CMake。 最后点击 Finish。...的运转流程 1、Gradle 调用外部构建脚本CMakeLists.txt 2、CMake 按照构建脚本的命令将 C++ 源文件 native-lib.cpp 编译到共享的对象中,并命名为 libnative-lib.so...CMake构建脚本是一个纯文本的文件,而且这个名字必须是是CMakeLists.txt 要常创建一个可以用作CMake构建脚本的纯文本文件,请按以下步骤操作: 1、从Android Studio...如果原生文件还没有构建脚本,需要创建CMake构建脚本 关于 关联到原生有两种方式,一种是通过Android Studio,一种是手动,其实其背后的东西是一致的,我们就一一来说明 1、通过Android

    2.3K42

    Android Studio中通过CMake使用NDK并编译自定义和添加预编译

    属性中,并且在so构建时,gradle会把该属性值传递给CMake进行构建。...3、认识CMakeLists.txt构建脚本文件 CMakeLists.txt文件用于配置JNI项目属性,主要用于声明CMake使用版本、so名称、C/CPP文件路径等信息,下面是该文件内容: # For...我们用CMake构建C++,然后CMake又要和gradle结合,在Android Studio里面协作管理C++和Java的代码。...配置OpenCV的C++构建 把包含文件夹OpenCV-android-sdk/sdk/native/jni/include和构建文件夹OpenCV-android-sdk/sdk/native...${log-lib} ) 需要注意的是.so使用SHARED,.a使用STATIC。 注意:构建so文件和.a文件必须copy在src/main/jniLibs这个目录,才可以自动被打包。

    3.7K20

    Android NDK开发扫盲及最新CMake的编译使用

    Android Studio 2.2 之后,工具中增加了 CMake 的支持,你可以这么认为,在 Android Studio 2.2 之后你有2种选择来编译你写的 c/c++ 代码。...Android SO文件的兼容和适配 当我们开发 Android 应用的时候,由于 Java 代码运行在虚拟机上,所以我们从来没有关心过这方面的问题。...CMake 编译自己及其他建的。...总结以下3点 编译静态/动态 修改输出路径 复制暴露的头文件 接着,我们看下 app 模块是如何使用建好的静态/动态的。...可以看下基本上分成了4个步骤引入: 分别创建静态/动态,直接引用已经有的 .a 文件 或者 .so 文件 创建自己应用的 hello-libs 加入之前暴露头文件 链接上静态/动态 还是很好理解的

    2.4K30

    Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态打包 | 头文件与函数拷贝 | CMake 脚本配置 )

    FFMPEG 交叉编译后的函数及头文件 II . FFMPEG 静态打包动态 ( 仅做参考 ) III . 创建 Android Studio 工程 IV ....创建 Android Studio 工程 ---- 创建 Android Studio 工程 : 创建一个 Native C++ 类型的 Android 工程 ; ( 这里就不墨迹基础操作了 ) IV...指定 FFMPEG 静态 # CMAKE_CXX_FLAGS 表示会将 C++ 的参数传给编译器 # CMAKE_C_FLAGS 表示会将 C 参数传给编译器 # 参数设置 : 传递 CMAKE_CXX_FLAGS...指定 FFMPEG 静态 # CMAKE_CXX_FLAGS 表示会将 C++ 的参数传给编译器 # CMAKE_C_FLAGS 表示会将 C 参数传给编译器 # 参数设置 : 传递 CMAKE_CXX_FLAGS...博客资源 ---- 博客相关资源 : ① CSDN 博客地址 : 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态打包 | 头文件与函数拷贝 |

    2.3K30

    ndk代码支持断点调试

    实际上android studio从2.2开始就完全支持ndk开发,并且可以进行断点调试。 实际应用中发现,真正使用新版studio构建c/c++工程的项目极少。...这里有个误区是android studio其实是支持ndk-build和cmake两种构建方式的,但是几乎所有的博客在给教程的时候都是用的官方推荐的cmake构建方式。...两种配置方法的区别在于,配置defaultconfig中的ndk的abifilters参数,android studio会将所有的架构so打包到一个apk中,但是如果使用productflavors,将会根据不同架构打包不同的...使用android studio编译c/c++不会单独生成so,不过可以使用android studio的apk 分析工具查看生成的so。...尊重开发者,一升级xcode就是不能用。ndk-build构建方式以后可能会不支持,但是那应该也是swift发布10.0版本的时候了。

    3.8K61

    CMakeCMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 )

    文章目录 一、Android NDK 构建脚本 二、CMake 构建脚本示例 三、CMake 命令手册 1、CMake 脚本命令 2、CMake 工程命令 该系列博客的应用场景是 Android Studio...两个脚本 , 详细的细节参考如下链接 ndk-build Android.mk Application.mk 使用构建 老的 Android 开发环境使用的是这种方式编译 C/C++ 源码 ;... , 将找到的路径赋值给 log-lib # 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm\usr\lib\liblog.so #...add ${log-lib}) 从之前的一篇博客 【Android NDK 开发】Android Studio 使用 CMake 导入静态 ( CMake 简介 | 构建脚本路径配置...target_link_libraries 等 ; Android Studio 中的 CMakeLists.txt 构建脚本中常用的命令 : cmake_minimum_required add_library

    3.8K01

    AndroidStudio3.0NDK输出多个so

    这次升级到Android Studio3.1,再次尝试NDK发现按照之前方法进行so生成会出现一些问题,写的文章已经不是普遍适用了。...AndroidStudio3.1使用CMake简单操作 这部分相关的文章有很多,我推荐一篇写的比较详细的博文: Android Studio3.0开发JNI流程------JNI入门级。...然后项目自己创建后会生成Java类、cpp文件,自己编译生成so直接运行项目就OK了。 CMake的使用 使用CMake只需要修改cpp文件和CMakeLists.txt。...CMakeLists.txt位于app目录下 CMakeLists.txt # 有关使用CMakeAndroid Studio的更多信息,请阅读文档:https://d.android.com/studio...log-lib # 在CMake定位前指定的NDK名称 log ) # (链接目标)指定CMake应该链接到目标中,可以链接多个,比如定义

    1.2K10

    Android 安装包优化】使用 lib7zr.so 动态处理压缩文件 ( 拷贝 lib7zr.so 动态文件Android 工程中 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一、拷贝 p7zip 源码中的头文件Android Studio 项目中 二、配置 CMakeLists.txt 构建脚本 1、导入动态 2、导入头文件 三、完整 CMakeLists.txt...动态 ) 【Android 安装包优化】使用 lib7zr.so 动态处理压缩文件 ( 拷贝 lib7zr.so 动态Android Studio 工程 | 配置 build.gradle...构建脚本 ) 一、拷贝 p7zip 源码中的头文件Android Studio 项目中 ---- 参考 【Android 安装包优化】使用 lib7zr.so 动态处理压缩文件 ( 修改 7zr...Android Studio 工程下的 cpp 目录中 , 为 lib7zr.so 动态需要的头文件创建一个 lib7zr 目录 , 存放相关源码 ; 二、配置 CMakeLists.txt 构建脚本...---- 1、导入动态 导入动态 : 参考 【Android NDK 开发】Android Studio 使用 CMake 导入动态 ( 构建脚本路径配置 | 指定动态查找路径 | 链接动态

    2.9K20

    手把手教你如何在Android下进行JNI开发(入门)

    下面我将介绍Android Studio着重推荐的CMake方式进行JNI开发。...(2)NDK:这套工具集允许为 Android 使用 C 和 C++ 代码。 (3)CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生。...如果启用此复选框,Android Studio 会将 -fexceptions 标志添加到模块级 build.gradle文件的 cppFlags中,Gradle 会将其传递到 CMake。...如果启用此复选框,Android Studio 会将 -frtti 标志添加到模块级 build.gradle文件的 cppFlags中,Gradle 会将其传递到 CMake。...(2)CMakeLists.txt文件CMake的配置文件,通常他包含的内容如下: # TODO 设置构建本机库文件所需的 CMake的最小版本 cmake_minimum_required(VERSION

    3.9K10

    CMakeAndroid Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )

    文章目录 一、Android Studio 中使用 CMake 编译单个 C++ 源文件 二、cmake_minimum_required 命令设置最小 CMake 版本 三、project 命令设置工程名称...详细中文注释 该系列博客的应用场景是 Android Studio 下 NDK 编程 , 使用 CMake 构建 C/C++ 工程 ; 一、Android Studio 中使用 CMake 编译单个 C...++ 源文件 ---- Android Studio 自动生成的 CMakeLists.txt 构建脚本就是默认编译单个 C++ 源码的构建脚本 ; cmake_minimum_required(VERSION...官方查询这些命令的用法 , 在稍后的博客中也会逐一讲解 Android Studio 中的 NDK 常用的 CMake 命令 ; 参考 【CMakeCMake 引入 ( Android NDK 构建脚本...链接函数库命令参数说明 : 参数 1 : 本构建脚本要生成的动态目 标 参数 2 ~ … : 后面是之前预编译的动态或静态 , 或引入的动态 # 指定 CMake 应该连接到目标函数的若干函数

    4.3K00

    Android NDK 开发】Android Studio 使用 CMake 导入动态 ( 构建脚本路径配置 | 指定动态查找路径 | 链接动态 )

    CMake 引入动态与静态库区别 II . Android StudioCMake 引入动态流程 III . 指定动态查找路径 IV . 链接函数 V . 完整代码示例 1 ....博客资源 参考博客 : 【Android NDK 开发】Android Studio 使用 CMake 导入静态 ( CMake 简介 | 构建脚本路径配置 | 引入静态 | 指定静态路径 | 链接动态...Android StudioCMake 引入动态流程 ---- Android StudioCMake 引入静态流程 : 1 . build.gradle 配置 CMake 编译选项 :...CMake 构建脚本 CMakeList.txt 设置动态查找路径 : # 设置变量 # CMAKE_CXX_FLAGS 表示会将 C++ 的参数传给编译器 # CMAKE_C_FLAGS 表示会将...博客资源 ---- 博客相关资源 : ① CSDN 博客地址 : 【Android NDK 开发】Android Studio 使用 CMake 导入动态 ( 构建脚本路径配置 | 指定动态查找路径

    9.2K20

    Android NDK 开发之 CMake 必知必会

    Android Studio 从 2.2 版本起开始支持 CMake ,可以通过 CMake 和 NDK 将 C/C++ 代码编译成底层的,然后再配合 Gradle 的编译将打包到 APK 中。...这意味就不需要再编写 .mk 文件来编译 so 动态了。 CMake 是一个跨平台构建系统,在 Android Studio 引入 CMake 之前,它就已经被广泛运用了。...最后同样地执行构建,在 build 目录下可以看到生成的文件。 到这里,就基本可以使用 CMake构建 C/C++ 工程了。...为编译的设置属性 接下来再回到用 CMake 编译动态的话题上,毕竟 Android NDK 开发也主要是用来编译了,当编译完 so 之后,我们可以对它做一些操作。...{CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/armeabi/libavcodec-57.so ) 链接到其他的 如果编译了多个,并且想之间进行链接

    1.5K20

    Android FFMPEG 开发】Android Studio 中配置 FFMPEG 注意事项 ( 静态 链接 libz.so | 导入 FFMPEG 函数顺序 )

    Android Studio 中 FFMPEG 静态引入完整 CMakeList.txt 构建脚本 I . 导入 z ( FFMPEG 动态 与 静态库区别 ) ---- 1 ....Android Studio 中 FFMPEG 静态引入完整 CMakeList.txt 构建脚本 ---- # I ....指定 FFMPEG 头文件查找目录 # CMAKE_SOURCE_DIR 指的是当前的文件地址 include_directories(${CMAKE_SOURCE_DIR}/include...指定 FFMPEG 静态 # CMAKE_CXX_FLAGS 表示会将 C++ 的参数传给编译器 # CMAKE_C_FLAGS 表示会将 C 参数传给编译器 # 参数设置 : 传递 CMAKE_CXX_FLAGS...C+= 参数给编译器时 , 在 该参数后面指定的路径 # CMAKE_SOURCE_DIR 指的是当前的文件地址 # -L 参数指定动态的查找路径 set(CMAKE_CXX_FLAGS

    1.1K20

    Android NDK 开发】Android.mk 配置静态 ( Android Studio 配置静态 | 配置动态与静态库区别 | 动态与静态打包对比 )

    Android Studio 中使用 Android.mk 配置静态 总结 II . 第三方动态来源 III . 配置 Android.mk 构建脚本路径 IV ....Android Studio 中使用 Android.mk 配置静态 总结 ---- Android Studio 中使用 Android.mk 配置第三方 静态 : ① Android.mk 脚本路径设置...源码 编译 / 打包 配置 原理 : 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild...构建脚本路径配置 原理 : 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild...动态 与 静态 打包对比 ---- 动态打包策略 : 使用动态 , 打包时会将所有的动态打包入 APK 文件中 , 静态打包策略 : 静态只将使用到的静态打包入 APK 中 , 生成的比较小

    4.3K31

    Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态 | Android Studio 中配置使用第三方动态 )

    动态 与 静态 II . 编译动态 III. Android Studio 使用第三方动态 IV . Android Studio 关键代码 V . 博客资源 I ....动态 : 编译链接时 , 不将打包入可执行文件中 , 在程序运行时调用到该时才链接加载该动态 ; Android 与 Linux 静态 后缀为 “.so” ; 4 ....book@book-virtual-machine:~/NDK$ 目录中的 libadd.so 就是编译完成的动态 , 该动态可以放到 Android Studio 项目中使用 ; III....Android Studio 使用第三方动态 ---- 1 ....CMakeLists.txt 中配置动态 : 配置示例 : # 设置变量 # CMAKE_CXX_FLAGS 表示会将 C++ 的参数传给编译器 # CMAKE_C_FLAGS 表示会将 C 参数传给编译器

    2.8K20
    领券