首页 > 编程语言 >c++_shared库引入的问题

c++_shared库引入的问题

时间:2023-12-31 21:11:21浏览次数:23  
标签:... 文件 STL c++ AAR 引入 shared

项目组提供了一个AAR文件供下游业务团队集成。

某天,下游团队反馈了一个紧急的问题,最终客户的开发者使用Android Studio打包时,构建工具提示构建失败,原因是存在重复的c++_shared库文件,建议使用pickFirst命令来修复。
最终客户的开发者查阅了一些资料,按照帖子的建议,在项目对应的build.gradle文件中尝试增加pickFirst相关的指令后,问题依然存在,构建仍然失败。

检查我们项目提供的AAR包,确实存在libc++_shared.so文件,据下游团队和最终客户的开发者反馈,他们的项目中依赖的其它AAR,也都存在libc++_shared.so文件。

使用C++编写代码时,通常都会使用到STL,NDK针对各平台,分别提供了动态库和静态库版本,即libc++_shared.so和``libc++_static.a。 安卓官网推荐开发者在build.gradle中通过指定变量ANDROID_STL的值来决定使用动态库还是静态库,即在build.gradle`中,增加类似如下配置:

android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                ...
                // 使用静态库
                arguments "-DANDROID_STL=c++_static"
                // 或者使用动态库
                arguments "-DANDROID_STL=c++_shared"
                ...
            }
        }
        ...
    }
    ...
}

经过咨询部门内其它产品的同事,确认本问题最简洁有效的修复方案即在构建时,静态链接C++ STL的库文件。

最终的修复操作如下:

  1. 修正C++项目的构建脚本,屏蔽掉链接C++ STL动态库的指令。
  2. 修正项目中的Java代码,去掉加载动态库c++_shared的代码。
  3. 修正AAR的构建脚本,指定链接C++ STL的静态库文件。

经过上述修复操作,重新构建AAR包。检查该AAR文件,未找到libc++_shared.so文件。
相关文件提供给下游团队,并提供给最终客户的开发者集成后,报错现象消失,通过Android Studio打包构建成功,相关功能经验证,正常可用,问题得到解决。

参考资料

标签:...,文件,STL,c++,AAR,引入,shared
From: https://www.cnblogs.com/jackieathome/p/17937700

相关文章

  • C++STL常用容器queue和stack
    2.5stack容器2.5.1stack基本概念概念:stack是一种先进后出(FirstInLastOut,FILO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为---入栈push栈中弹出数据称为---出栈pop生活中的栈:子弹进弹夹出弹夹的过程2.5.2s......
  • C++U5-12-阶段测评练习
    练习题目如下1 2 34 5 6  7 编程题1 【算法分析】可以发现如果一个格子中的一条边是周长的一部分,那么要么它是边界,要么它的两边是1和0。因此可以遍历网格,找到每个陆地的格子,并判断它的四条边哪些是周长的一部分。【参考代码】#include<bit......
  • C++U4-第11课-综合练习
    学习目标 贪心算法 [导弹拦截] 【算法分析】首先考虑第一问,即序列中的最长不上升子序列。令g为以i结尾的最长不上升子序列的值,那么可以枚举g1​~gi−1,若aj​≤ai​,则gi​=max(gi​,gj+1​),否则gi​=max(gi​,g......
  • C++入门-命名空间、引用、函数重载
    引言:C++是C的一个超集,即C++继承了C语言的全部特性。C++不仅包含了C的关键字、语法和语义,还增加了一些新的特性。例如命名空间、引用、函数重载等,本片博客旨在向大家分享C++相较于C语言,增加的一些新的特性。1.命名空间namespace我们知道,在C语言中编写程序时,有时会存在标识符名与标准......
  • 【C/C++】通过下面的工作来改进String类声明(即将String1.h升级为String2.h)。 a. 对+运
    通过下面的工作来改进String类声明(即将String1.h升级为String2.h)。a.对+运算符进行重载,使之可将两个字符串合并成一个。b.提供一个Stringlow()成员函数,将字符串中所有的字母字符转换为小写(别忘了cctype系列字符函数)。c.提供String()成员函数,将字符串中所有字母字符转换成大......
  • Spring学习记录之引入外部属性配置文件
    Spring学习记录之引入外部属性配置文件前言这篇文章是我第二次学习b站老杜的spring相关课程所进行的学习记录,算是对课程内容及笔记的二次整理,以自己的理解方式进行二次记录,其中理解可能存在错误,欢迎且接受各位大佬们的批评指正;关于本笔记,只是我对于相关知识遗忘时快速查阅了解......
  • 【环境配置】vscode配置C C++开发和调试环境
    【环境配置】vscode配置CC++开发和调试环境首先区分一些基本概念,其中部分内容可能有所出入,同时本文截至2023/12/31,更多的详细区别,请查阅官方文档MinGW,MinimalistGNUforWindows,前身为mingw32,是一个用于创建MicrosoftWindows应用程序的免费开源软件开发环境。包括GNU编译器......
  • Oracle数据库统计信息_执行计划_sharedpool等的知识梳理
    Oracle数据库统计信息_执行计划_sharedpool等的知识梳理背景最近有项目出现了年底业务量增加时卡顿的情况.同事多次发现执行SQL缓慢.但是重新执行统计信息更新后问题就优化的现象.12月份上半月解决测试环境的SQLServer卡顿时基本上也是这个套路重建索引,添加必要索引的方......
  • django练手系列(五):优化basic.html的功能,增加其它网页引入模板网页后可以变动的部分
    一.折叠basic.html关于导航部分的代码,折叠后如图:二.增加网页可变动部分的方法:增加可变动部分的方法是:在html文件的合适位置插入代码块{%block位置名称%}{%endblock%}引用模板的网页只需要在变动部分写入同样的代码块,即可插入可变动部分。三.增加网页可变动部分......
  • C++ opencv检测圆
     #include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<iostream>usingnamespacecv;usingnamespacestd;intmain(intargc,char**argv){//读取图像Matsrc......