#编译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库文件]
版权归属:
会飞的大象
许可协议:
本文使用《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》协议授权
评论区