在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
作者@秀才遇到猫 jni本地方法测试这个演示程序是测试scala和java调用动态库,请用eclipse或者intellij打开,配置好scala环境(不知道请参考项目loaddll),或者配置scala环境,请自行百度谷歌。example包下面为scala程序,jexample为java程序,两者调用动态库一样。 注:java测试时请移动至example目录下,scala移动到jexample下(不然两者会有冲突,请分开测试java和scala)目录结构如下
本项目两个分支如果满足eclipse或者intellij环境,编译正常,则直接进入步骤2,没有则从步骤1开始 步骤1 编译java和scala字节码java编译Sample1.java(测试时注意修改包名)javac example/Sample1.java scala编译Sample1.scalascalac example/Sample1.scala 步骤2java生成.h#### 命令如下 javah -classpath . -jni example.Sample1 #必须打包,及命令目录在class文件上一级,不然调用失败 -jni参数可以省略,注意没有class结尾,不然找不到 scala生成.h,前提是配置好scala环境linux和mac命令如下SCALA_LIB=$SCALA_HOME/libSCALA_CP=$SCALA_LIB/scala-library.jar:$SCALA_LIB/scala-reflect.jarjavah -cp $SCALA_CP:. example.Sample1 windows命令如下SCALA_LIB=%SCALA_HOME%\libSCALA_CP=%SCALA_LIB%\scala-library.jar;$SCALA_LIB\scala-reflect.jarjavah -cp %SCALA_CP%;. example.Sample1 ##### 注:windows会多一个.h文件,如下图linux和windows结果请忽略example_Sample1_delayedInit__body.h只需要example_Sample1.h(为了方便重命名Sample1.h)编写对应的cpp文件Sample1.cpp 步骤3 编译动态库windows请用vs编译在目录Sample1下,用vs2103(高版本也行)打开Sample1.sln linux 编译如下g++ -dynamiclib -shared -fPIC \ -I/usr/include -I$JAVA_HOME/include -I$JAVA_HOME/include/linux \ Sample1.cpp -o Sample1.so mac os 编译如下g++ -dynamiclib -shared -fPIC \ -I/usr/include -I$JAVA_HOME/include -I$JAVA_HOME/include/darwin \ Sample1.cpp -o Sample1.dylib Cmake方式,文件CMakeLists.txtlinux和mac os下使用cmakecd Sample1mkdir buildcd buildcmake ..make windows下使用cmake-gui住:目前java和scala两种方式是调用一样的动态库文件,所以觉得复杂时,选用java代码方式编写,获得编译的.h步骤4 调用eclipse 调用方式按照如图配置eclipse配置动态库路径或者1.windows环境放进C:\Windows\System32(64位) C:\Windows\SysWOW64(32位)2.linux放到/usr/lib或者/usr/local/lib3.苹果暂时未知 命令行调用方式VM arguments中加入该动态库文件的路径 1.把库放到java命令行执行的当前目录2.如果不是, 执行命令时添加-Djava.library.path=$(pwd), $(pwd)为放置 Sample1.so(linux) or Sample1.dylib(os x) or Sample1.dll(windows)的目录 java类 java -Djava.library.path=$(pwd) -cp . example.Sample1scala -Djava.library.path=$(pwd) -cp . example.Sample1 scala类 SCALA_LIB_HOME=$SCALA_HOME/lib SCALA_CP=$SCALA_LIB_HOME/scala-library.jar:$SCALA_LIB_HOME/scala-reflect.jar java -Djava.library.path=$(pwd) -cp $SCALA_CP:. example.Sample1 windows下环境变量请替换$符号为%%包裹另附上开源项目javacpp 以及封装一些预制的开源c++库 |
请发表评论