侧边栏壁纸
博主头像
会飞的大象博主等级

爱运动的程序猿

  • 累计撰写 126 篇文章
  • 累计创建 158 个标签
  • 累计收到 0 条评论
标签搜索

目 录CONTENT

文章目录

so库封装

会飞的大象
2023-08-24 / 0 评论 / 0 点赞 / 578 阅读 / 529 字
#编译so库
#首先,我们需要将example.c源文件编译成目标文件(.o文件):
gcc -c -fPIC example.c -o example.o
#接下来,我们将目标文件与example.h头文件一起打包成静态库(.a文件):
ar rcs libexample.a example.o
#最后,我们使用gcc编译器将静态库链接成动态库(.so文件)
gcc -shared -o libexample.so example.o -L -lexample
#这里,-L.表示在当前目录下查找库文件,-lexample表示链接名为libexample的库。现在,我们已经成功地将example.h和example.c编译成了一个名为libexample.so的动态库。



#示例
#使用Terminal 执行生成.h的命令,将目录先定位到java目录
#先执行
javah -jni cn.byzk.jni.SimpleJniUtils
#随后系统会自动生成 .h 文件 自己编写一个.c的文件 然后自己根据.h文件编写.c文件,之下如下命令生成.o文件.
gcc -c -fPIC simpleJniUtils.c -o SimpleJniUtils.o
#报错cn_byzk_jni_SimpleJniUtils.h:2:10: fatal error: jni.h: No such file or directory
gcc -I "C:\Program Files\Java\jdk1.8.0_251\include" -I "C:\Program Files\Java\jdk1.8.0_251\include\win32"  -c -fPIC simpleJniUtils.c -o simpleJniUtils.o
ar rcs libSimpleJniUtils.a simpleJniUtils.o
gcc -shared -o libSimpleJniUtils.so simpleJniUtils.o -L -libSimpleJniUtils

#windows
gcc SimpleJniUtils.c -fPIC -shared -o libSimpleJniUtils.so

#其他命令
##将.o文件从input.a 文件中提取出来
ar -x input.a
#

#秉哥提供的sk空使用示例
#示例将.o文件从input.a 文件中提取出来
ar -x newcert.a
ar -x comciphfun.a
#打包示例。
gcc -shared -o caCertUtil.so  *.o libswsds.so  -L -caCertUtil
#另一种打包示例
gcc   -fPIC -shared -o caCertUtil.so   -Wl,--whole-archive newcert.a comciphfun.a  -Wl,--no-whole-archive  libswsds.so  -L -caCertUtil -lpthread -lstdc++

#打包方式(包含.c文件)
gcc  -fPIC -shared -o libapp_seal_common_Native.so -I  "/home/liliang/so-test/jdk1.8.0_301/include" -I "/home/liliang/so-test/jdk1.8.0_301/include/linux"  app_seal_common_Native.c newcert.a comciphfun.a libswsds.so_GM0018_v5.9.4.11_x86_64 -lpthread -lstdc++

###  其他命令 
#查看so库是否正常
ldd -r [so库文件]
#查看so库架构
file   [so库文件]
0

评论区