Java利用JavaCPP調(diào)用算法示例
配置liunx 環(huán)境系統(tǒng)
配置so 文件存放路徑 [root@arch2 ~]# cat /etc/ld.so.conf.d/so.conf /opt/app/tools/so/ 從新調(diào)用ldconfig 命令 ldconfig
配置java 項(xiàng)目
配置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>
配置文件當(dāng)中需要主要的幾點(diǎn)
<!--第一次生成javacpp 文件的時(shí)候,skip 一定要設(shè)置為false ,后期對(duì)于生成的類進(jìn)行了處理之后,為了避免每次運(yùn)行都重啟,可以把skip 設(shè)置為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(); } }
注意點(diǎn)
在利用javacpp 的時(shí)候,經(jīng)常會(huì)出現(xiàn)找不到so 文件的情況,這個(gè)時(shí)候,大家可以把so 文件copy 到/usr/lib 目錄下,然后更改相應(yīng)的權(quán)限。
到此這篇關(guān)于Java利用JavaCPP調(diào)用算法示例的文章就介紹到這了,更多相關(guān)Java JavaCPP調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA中方法的聲明及使用方式(繼承、多態(tài)、封裝)
這篇文章主要介紹了JAVA中方法的聲明及使用方式(繼承、多態(tài)、封裝),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02在非spring環(huán)境中調(diào)用service中的方法
非Spring環(huán)境指的是不使用Spring框架來(lái)管理和配置應(yīng)用程序的運(yùn)行時(shí)環(huán)境,本文將給大家介紹如何在非spring環(huán)境中調(diào)用service中的方法,文中有詳細(xì)實(shí)現(xiàn)步驟,需要的朋友可以參考下2024-03-03

Java單鏈表的簡(jiǎn)單操作實(shí)現(xiàn)教程

Spring Boot項(xiàng)目@RestController使用重定向redirect方式

java線程安全鎖ReentrantReadWriteLock原理分析readLock