在此之前,需要在java编译软件IDEL中配置本地的Maven仓库等,可自行网上搜索配置
一、在Windows系统下调用c++软件生成的dll文件。
1.在IDEL中创建Maven工程,配置下载jna包等,在pom文件中写入如下配置即可
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
<version>3.0.9</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>tz.dlltest</mainClass>
</configuration>
</plugin>
</plugins>
</build>
2.创建interface以及java文件夹
3.在vs2019中创建c++动态链接库,x86与x64的选择与电脑有
4.将编译产生的动态链接库dll放到jdk的bin目录下即可,正常情况下IDEA中的运行结果如下
二、在Linux系统下将c++编译软件保存的cpp文件打包成.so文件,使用Maven工具包将java调用程序打包成jar包,在Linux系统下使用jar包调用.so文件。
1.使用Maven工具包打包java程序为jar包,这里的mainclass后面的内容需要改成你的主函数所在的类名
pom文件的配置可能有所不同。
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
<version>3.0.9</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>tz.dlltest</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.编写cpp文件
3.开启虚拟机,使用xshell链接虚拟机,第一次使用需要创建一个目录,用来存放所有调用的文件内容,我是在opt文件下创建的,下面执行的操作是删除之前的东西。
4.之后即可打开xftp来传输文件
5.将cpp文件编译为.so文件g++ -std=c++11 -shared -fpic Dll1.cpp -o libdlltest.so
红色地方为cpp文件,蓝色为要编译为.so文件的文件名,需要加lib。
6.配置.so文件读取位置有可能在执行的过程中会出现找不到.so的错误,需要在Linux中的配置文件中配置.so的扫描目录:命令:vim /etc/profile,加入如下的配置:export LD_LIBRARY_PATH=”LD_LIBRARY_PATH:/opt/testdll”
7.使用jar包调用.so文件java -jar 后面是jar包的名字
8.此时虚拟机中出现正确结果表明调用成功。