作者@秀才遇到猫
这个演示程序是测试scala和java调用动态库,请用eclipse或者intellij打开,配置好scala环境(不知道请参考项目loaddll),或者配置scala环境,请自行百度谷歌。example包下面为scala程序,jexample为java程序,两者调用动态库一样。
目录结构如下
如果满足eclipse或者intellij环境,编译正常,则直接进入步骤2,没有则从步骤1开始
javac example/Sample1.java
scalac example/Sample1.scala
#### 命令如下
javah -classpath . -jni example.Sample1 #必须打包,及命令目录在class文件上一级,不然调用失败 -jni参数可以省略,注意没有class结尾,不然找不到
SCALA_LIB=$SCALA_HOME/lib
SCALA_CP=$SCALA_LIB/scala-library.jar:$SCALA_LIB/scala-reflect.jar
javah -cp $SCALA_CP:. example.Sample1
SCALA_LIB=%SCALA_HOME%\lib
SCALA_CP=%SCALA_LIB%\scala-library.jar;$SCALA_LIB\scala-reflect.jar
javah -cp %SCALA_CP%;. example.Sample1
##### 注:windows会多一个.h文件,如下图linux和windows结果 请忽略example_Sample1_delayedInit__body.h 只需要example_Sample1.h(为了方便重命名Sample1.h) 编写对应的cpp文件Sample1.cpp
在目录Sample1下,用vs2103(高版本也行)打开Sample1.sln
g++ -dynamiclib -shared -fPIC \
-I/usr/include -I$JAVA_HOME/include -I$JAVA_HOME/include/linux \
Sample1.cpp -o Sample1.so
g++ -dynamiclib -shared -fPIC \
-I/usr/include -I$JAVA_HOME/include -I$JAVA_HOME/include/darwin \
Sample1.cpp -o Sample1.dylib
cd Sample1
mkdir build
cd build
cmake ..
make
按照如图配置eclipse配置动态库路径 或者 1.windows环境放进C:\Windows\System32(64位) C:\Windows\SysWOW64(32位) 2.linux放到/usr/lib或者/usr/local/lib 3.苹果暂时未知
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.Sample1
scala -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
另附上开源项目javacpp 以及封装一些预制的开源c++库
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。