如何合并多个*.so库文件

如何合并多个*.so库文件,第1张

楼下是正解, 比如有两个共享库liba.so, libb.so, 位于/lib/下, 用g++ 链接时应该是这样子: g++ -L /lib/ -la -lb hello.cpp -o hello

前段时间有个项目,需要用c++开发我们自己的sdk,另外,我们的sdk又依赖于另一个aar包,当时想当然的以为生成so的时候会一起把aar打包进去,结果发现调用so的时候,aar里面的类根本找不到,说明aar 并没有一起打包进so

后来想了下,既然将aar打包进so没法实现,不如把我自己的so库,还有第三方的aar再重新打一次,最终打成aar包,这样就方便多了。步骤如下:

先在原来测试我们自己so库的测试工程上新建一个moudle:

下面将上图中的classes.jar还有lib下面的jar包拷贝到新建的module下的libs目录,并将剩余的jni,AndroidManifest.xml等文件分别拷贝合并到对应的目录内

5.下面就是要把我们aar拆出来的零件以及我们自己的so库重新打包成aar:

工程右侧,找到Gradle,点开后找到我们上面新建的module,点击Tasks->build->assemble

等构建完成后,aar就生成了,生成目录在我们的moudle目录下面的:

build->outputs->aar下面

okay

写在一条命令里有点复杂哦。合并结果保存到文件3中。

awk -F'*' 'NR==FNR{a[FNR]=$1b[FNR]=$2c=FNR}NR>FNR{flag=0for(i=1i<=ci++){if($2==b[i]){print a[i] $2flag=1break}}if(flag==0)print}' file2 file1 >file3

思路:

以 * 作为字段分隔符,将每行记录分割为两个字段。

1. 将文件2每行记录的两个字段分别以数组形式保存下来,并记录行数。

2. 对于文件1中的每一行,使用for循环与上一步记录的文件2的字段2数组对比。若相同,则打印文件2的字段1和文件1的字段2。若不同,则打印文件1中的原记录。最后的合并结果保存到文件3中。

试过OK。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11738232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存