Java利用JavaCPP调用算法示例

 更新时间:2021年10月28日 10:15:15   作者:jacdong  
本文主要介绍了Java利用JavaCPP调用算法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

配置liunx 环境系统

配置so 文件存放路径
[root@arch2 ~]# cat /etc/ld.so.conf.d/so.conf 
/opt/app/tools/so/

从新调用ldconfig 命令
ldconfig

配置java 项目

配置pom 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

 <modelVersion>4.0.0</modelVersion>

 <groupId>org.jacdong</groupId>
 <artifactId>javacpptest</artifactId>
 <version>0.1-SNAPSHOT</version>
 
   <properties>
   
        <include.path>${basedir}/cppbuild</include.path>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <javacpp.cppbuild.skip>true
        </javacpp.cppbuild.skip> <!-- To skip execution of cppbuild.sh: -Djavacpp.cppbuild.skip=true -->
        <javacpp.parser.skip>false
        </javacpp.parser.skip>     <!-- To skip header file parsing phase: -Djavacpp.parser.skip=true  -->
        <javacpp.compiler.skip>true
        </javacpp.compiler.skip> <!-- To skip native compilation phase: -Djavacpp.compiler.skip=true -->
        <javacpp.moduleId>${project.artifactId}</javacpp.moduleId>
        <javacpp.platform.root></javacpp.platform.root>
        <javacpp.platform.compiler></javacpp.platform.compiler>
        <javacpp.platform.extension></javacpp.platform.extension>
        <javacpp.platform.linux-x86>linux-x86</javacpp.platform.linux-x86>
        <javacpp.platform.linux-x86_64>linux-x86_64</javacpp.platform.linux-x86_64>
        <javacpp.platform>linux-x86_64</javacpp.platform>

        <skipTests>true</skipTests>

    </properties>

 <dependencies>
  <dependency>
   <groupId>org.bytedeco</groupId>
   <artifactId>javacpp</artifactId>
   <version>1.5.3</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/junit/junit -->
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
   <scope>test</scope>
  </dependency>
 </dependencies>

 <build>
  <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
            </plugin>
            <plugin>
                <groupId>org.bytedeco</groupId>
                <artifactId>javacpp</artifactId>
                <version>1.5.3</version>
                <configuration>
                    <properties>${javacpp.platform}</properties>
                    <propertyKeysAndValues>
                        <property>
                            <name>platform.root</name>
                            <value>${javacpp.platform.root}</value>
                        </property>
                        <property>
                            <name>platform.compiler</name>
                            <value>${javacpp.platform.compiler}</value>
                        </property>
                        <property>
                            <name>platform.extension</name>
                            <value>${javacpp.platform.extension}</value>
                        </property>
                    </propertyKeysAndValues>
                    <classPath>${project.build.outputDirectory}</classPath>
                    <includePaths>
                        <includePath>${basedir}/src/main/resources/linux-x86_64</includePath>
                    </includePaths>
                    <linkPaths>
                    </linkPaths>
                </configuration>
                <executions>
                    <execution>
                        <id>javacpp.parser</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                        <configuration>
                           <skip>false</skip>
                            <outputDirectory>${project.build.sourceDirectory}</outputDirectory>
                            <classOrPackageName>com.jacdong.preset.*</classOrPackageName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <forkMode>once</forkMode>
                    <environmentVariables>
                        <LD_LIBRARY_PATH>target/classes/linux-x86_64</LD_LIBRARY_PATH>
                    </environmentVariables>
                </configuration>
            </plugin>
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1</version>
    <executions>
     <execution>
      <id>build-jnilib</id>
      <phase>process-classes</phase>
      <goals>
       <goal>exec</goal>
      </goals>
      <configuration>
       <executable>java</executable>   
                            <commandlineArgs>-jar ./libs/javacpp-1.5.jar -Xcompiler -g -Xcompiler -ggdb -nodelete -d target/classes/linux-x86_64 -Xcompiler -I${env.JAVA_HOME}/include -Xcompiler -I${env.JAVA_HOME}/include/linux -Xcompiler -fvisibility=default -Xcompiler -rdynamic -Xcompiler -std=c++11 -classpath target/classes com.jacdong.wrapper.JavaCPPTest</commandlineArgs> 
       </configuration>
     </execution>
     
     <execution>
                        <id>echoPath</id>
                        <phase>install</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <executable>echo</executable>
                            <commandlineArgs>"sudo cp ${basedir}/target/classes/linux-x86_64/*.so /usr/lib/;sudo ldconfig"</commandlineArgs>

                        </configuration>
                    </execution>
    </executions>
   </plugin>
   <plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
     <filesets>
      <fileset>
       <directory>src/main/java/com/jacdong/rtcm/wrapper/</directory>
       <includes>
        <include>JavaCPPTestTmp.java</include>
       </includes>
       <followSymlinks>false</followSymlinks>
      </fileset>
     </filesets>
    </configuration>
   </plugin>
  </plugins>
  <pluginManagement>
   <plugins>
    <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
    <plugin>
     <groupId>org.eclipse.m2e</groupId>
     <artifactId>lifecycle-mapping</artifactId>
     <version>1.0.0</version>
     <configuration>
      <lifecycleMappingMetadata>
       <pluginExecutions>
        <pluginExecution>
         <pluginExecutionFilter>
          <groupId>org.bytedeco</groupId>
          <artifactId>javacpp</artifactId>
          <versionRange>
           [1.5.3,)
          </versionRange>
          <goals>
           <goal>build</goal>
          </goals>
         </pluginExecutionFilter>
         <action>
          <ignore></ignore>
         </action>
        </pluginExecution>
        <pluginExecution>
         <pluginExecutionFilter>
          <groupId>
           org.codehaus.mojo
          </groupId>
          <artifactId>
           exec-maven-plugin
          </artifactId>
          <versionRange>
           [1.1,)
          </versionRange>
          <goals>
           <goal>exec</goal>
          </goals>
         </pluginExecutionFilter>
         <action>
          <ignore></ignore>
         </action>
        </pluginExecution>
       </pluginExecutions>
      </lifecycleMappingMetadata>
     </configuration>
    </plugin>
   </plugins>
  </pluginManagement>
 </build>
</project>

配置文件当中需要主要的几点

<!--第一次生成javacpp 文件的时候,skip 一定要设置为false ,后期对于生成的类进行了处理之后,为了避免每次运行都重启,可以把skip 设置为true-->
<configuration>
    <skip>false</skip>
    <outputDirectory>${project.build.sourceDirectory}</outputDirectory>                                       <classOrPackageName>com.jacdong.preset.* </classOrPackageName>
</configuration>
<!--commandlineArgs 一定不要换行-->
<configuration>
 <executable>java</executable>   
    <commandlineArgs>-jar ./libs/javacpp-1.5.jar -Xcompiler -g -Xcompiler -ggdb -nodelete -d target/classes/linux-x86_64 -Xcompiler -I${env.JAVA_HOME}/include -Xcompiler -I${env.JAVA_HOME}/include/linux -Xcompiler -fvisibility=default -Xcompiler -rdynamic -Xcompiler -std=c++11 -classpath target/classes com.jacdong.wrapper.SingleStationIono</commandlineArgs> 
</configuration>

定义自己的map 类

@Properties(target = "com.jacdong.wrapper.JavaCPPTestTmp",
value = {@Platform(include = {"javacpp.h"},
        compiler = "cpp11")})
public class JavacppMapper implements InfoMapper{

 public void map(InfoMap infoMap) {
        infoMap.put(new Info().cppNames("_stdcall").skip())
        .put();
}
}

注意点

在利用javacpp 的时候,经常会出现找不到so 文件的情况,这个时候,大家可以把so 文件copy 到/usr/lib 目录下,然后更改相应的权限。

到此这篇关于Java利用JavaCPP调用算法示例的文章就介绍到这了,更多相关Java JavaCPP调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你在Spring Boot微服务中集成gRPC通讯的方法

    教你在Spring Boot微服务中集成gRPC通讯的方法

    这篇文章主要介绍了教你在Spring Boot微服务中集成gRPC通讯的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • MyBatis关闭一级缓存的两种方式(分注解和xml两种方式)

    MyBatis关闭一级缓存的两种方式(分注解和xml两种方式)

    这篇文章主要介绍了MyBatis关闭一级缓存的两种方式(分注解和xml两种方式),mybatis默认开启一级缓存,执行2次相同sql,但是第一次查询sql结果会加工处理这个时候需要关闭一级缓存,本文给大家详细讲解需要的朋友可以参考下
    2022-11-11
  • Java基础学习之字符缓冲流的应用

    Java基础学习之字符缓冲流的应用

    这篇文章主要为大家详细介绍了Java基础中的字符缓冲流的相关应用,例如复制Java文件等,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一
    2022-09-09
  • Java实现AES/CBC/PKCS7Padding加解密的方法

    Java实现AES/CBC/PKCS7Padding加解密的方法

    这篇文章主要介绍了Java实现AES/CBC/PKCS7Padding加解密的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 两万字详解Java Sring String的常见操作以及StringBuffer StringBuilder的区别

    两万字详解Java Sring String的常见操作以及StringBuffer StringBuilder的区别

    本篇文章带你认识Sring、String的常见操作和StringBuffer 与StringBuilder的区别(字符串详解),对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • java基础的详细了解第五天

    java基础的详细了解第五天

    这篇文章对Java编程语言的基础知识作了一个较为全面的汇总,在这里给大家分享一下。需要的朋友可以参考,希望能给你带来帮助
    2021-08-08
  • Java开发环境不再需要配置classpath问题

    Java开发环境不再需要配置classpath问题

    这篇文章主要介绍了Java开发环境不再需要配置classpath问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Springboot如何优雅的关闭应用

    Springboot如何优雅的关闭应用

    这篇文章主要介绍了Springboot如何优雅的关闭应用问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 利用@Value注解为bean的属性赋值方法总结

    利用@Value注解为bean的属性赋值方法总结

    这篇文章主要介绍了利用@Value注解为bean的属性赋值方法总结,文中有详细的代码示例,对学习@Value注解有一定的参考价值,需要的朋友可以参考下
    2023-05-05
  • java中使用zxing批量生成二维码立牌

    java中使用zxing批量生成二维码立牌

    本篇文章主要介绍了java中使用zxing批量生成二维码立牌,非常具有实用价值,需要的朋友可以参考下。
    2016-12-12

最新评论