Linux下Java调用.so文件

目前是在Linux环境下调试完成C++的程序,实现了图片质量检测的基本功能,需要打包成.so文件,并且利用Java调用。Linux中C++一般生成如下格式的.so文件:lib+文件名+.so。但是在Java中调用时直接调用文件名即可。

1.首先创建Java类:

其中要包含lib文件,但libraryname只是上述文件名即可,无须全称。
在这里插入图片描述
然后在终端的相应目录下:javac HelloWorld.java
随后生成头文件:javah hello
:javac在hello目录下执行,而javah执行的是hello目录。
因为我编写的Java文件很简单,先创建文件夹helloworld,接着在src文件夹下面创建名为hello的package,并继续创建HelloWorld的Java class。并在HelloWrold中编写上述调用代码,所以生成上述文件夹。

2.生成.so文件:

:若是c++中调用了其他包,或者包的头文件,类似opencv库,需要在编译时将路径或者环境加进去。

1. ## 正常不带有opencv的.so文件编译
gcc -fPIC -D_REENTRANT -I/%自己JDK安装路径%/include -I/%自己JDK安装路径%/include/linux -c check.cpp
2. ## 带有opencv的.so文件编译
gcc -fPIC -D_REENTRANT -I/%自己JDK安装路径%/include -I/%自己JDK安装路径%/include/linux `pkg-config --cflags --libs opencv` -c check.cpp
3. ## 普通编译cpp文件
g++ check.cpp `pkg-config --cflags --libs opencv` -o a.out
gcc -shared check.o -o libcheck.so

3.Java调用.so文件:

(1)需要讲上述libcheck.so文件拷贝到正常Java允许的LD_LIBRARY_PATH路径下,需要sudo权限.
(2)export LD_LIBRARY_PATH=.将java加载库指定为当前目录(为你libcheck.so文件路径),在当前shell下有效。
最后便可以通过Java代码调用libcheck.so文件了,可以在idea中直接run HelloWorld。还可以在终端执行java hello.

遇到的问题: 目前在第二步中编译带有opencv头文件的c++代码是不报错的,但是在java调用时却显示无法load libcheck.so文件,原因自己一行行代码排查发现是c++代码中头文件的问题,我可以调用<highgui.h>,但是无法调用<opencv2/opencv.hpp>。目前正在查看如何调用<opencv2/opencv.hpp>或者如何导入路径。

后续完成这个问题,会继续更新本文。
这篇文章是一个简单的Java调用.so文件的例子,挺好的。小栗子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值