Liunx java-eclipse下C++的so库的调用(下)
来源:互联网 发布:淘宝增加信誉 编辑:程序博客网 时间:2024/05/07 23:00
前面对LINUX下打SO库进行了介绍。
这一章,将对WIN平台上编译C++打包SO库进行介绍,其实这个和LINUX下一样的操作,为什么要对WIN平台的介绍,是因为我在WIN平台打包碰到了问题,其次是我未使用过LINUX系统,习惯了WIN平台。好,不说废话了。
WIN32平台:
准备工作(版本可自选):
XP + JDK1.6
cygwin 最新版装:ubunit,g++,gcc,gdb (其中g++,gcc已升到4.5.3版,默认装好的是3.4.4)
swig :2.0.4
其中的.h和.cpp及.i文件请见上集中的interfacecar.h和interfacecar.cpp和cplus.i文件。
将以上文件放到同一个目录下,这个目录最好不要使用带空格的及中文的路径目录。如果有中文的可以使用subst来进行映射成其它盘符(嘿嘿通常我都这么搞)。
或都使用\来将空格进行转议如/cygdrive/c/program\ files/.... 中间的空格就使用\来转议
准备工作OK。
1、使用SWIG将.i文件编译为JAVA文件。(我的文件路径:f:\so\socplus)
[如果未设置环境变量的,必须先cd进入到swig目录]
swig -c++ -java f:\so\socplus\cplus.i
将产生.java和xxx_wrap.cxx文件
有了xxxx_wrap.cxx文件,就可以打SO库了。
2、先把.cpp和cxx文件编译为.o文件。
先cd进入到相应的目录,注cygwin的目录需要使用/cygdrive/进行映射
g++ -Wall -c interfacecar.cpp cplus_wrap.cxx
说明:
这命令是不是像LINUX下的呀,有些人对比了一下,怎么没有连接jni.h和jni_md.h头文件啊。原因是因为我的JDK装在了D:\program files\java下了,大家注意这个program files这个目录中有一个空格如果使用-I/cygdrive/d/program files/java/...时会提示找不到files/java/....明白为什么不用空格路径的原因了吧。嘿嘿,不要紧张,还是有解决办法的。到Cygwin目录搜一下jni.h和jni_md.h,把你的JDK中的jni.h和jni_md.h考过来替换即可解决(为什么要替换是因为我的Swig 导出的xxx_wrap.cxx用的是JDK1.6而我的cygwin中自带的jni不是这个版本的,所以冲突)。
找不到jni或版本不对的jni.h时,报错:
编译后产生两个.o文件;
3、将.o文件打包为so库文件。
g++ -shared -fpic interfacecar.o cplus_wrap.o -o libcp.so
这个跟LINUX命令没有什么区别,一样的。
OK,打包完成。
以上为WIN平台打包完成。
测试:
将.so和.JAVA文件全部丢到LINUX平台下进行测试。(好像也可以将JAVA文件编译为CLASS文件打个Jar,jar cvf xxx.jar *.class)这个JAVA的自行研究了。
有几个错:
java.lang.UnstaisfiedLinkError:no cp in java.library.path
这是找不到libcp.so这个库。我只知道放到/usr/lib下可以找到,当然对eclipse的高手可以设置搜索路径到libcp.so对应的路径下也一样可以找到。
由于打包版本和运行版本不对导致
由于我的WIN平台和虚拟机LINUX平台上的JDK不同,所以一直都没有测试成功。请读者自行验证了。
最后:总结几点。
打包时一定要注意使用的JDK,版本。运行环境版本要与打包版本一至,不然加载就会失败。(个人理解的,未得到验证)
其次,就是路径,环境变量需要设置好,否则就出现找不到库等问题。
再次,如果是打C++的SO库,在类型上都需要做一些必要的转换。这个只是个初步介绍,在实际项目中,会碰到各种问题,哪时再自行GOOGLE了。
OK,完毕。
- Liunx java-eclipse下C++的so库的调用(下)
- Liunx java-eclipse下C++的so库的调用(上)
- 如何在liunx下编译一个调用到c语言开发的动态库(so文件)的fortran程序。
- 在window平台下模拟Liunx使用GCC环境进行编译C的SO库。
- 在window平台下模拟Liunx使用GCC环境进行编译C的SO库
- Liunx c 下signal的使用。
- liunx下c语言的编译
- LINUX下PHP生成并调用C的.so文件
- mac下lua调用c生成的so文件
- Java在linux下调用C/C++生成的so文件
- Java在linux下调用C/C++生成的so文件
- Liunx下的route
- liunx下的PCB
- android项目在eclipse下调用第三方.so库的方法
- liunx 下 C/C++调用luajit
- linux下java jni调用.so文件的方法
- Eclipse下NDK开发(java调用so文件)
- Eclipse下NDK开发(java调用so文件)
- Android应用自动更新功能的实现!!!
- 关于磁盘的一些知识
- Project Euler 15
- Java Serializable
- Remove Nth Node From End of List
- Liunx java-eclipse下C++的so库的调用(下)
- C语言 遍历磁盘目录
- Linux工程实践学习笔记——基于主机系统的多客户即时通讯/聊天室 Day(3)
- 网络8——packet tracer 使用
- showModalDialog方式弹出的子画面上的文件下载
- 八款主流中型豪华SUV越野性能小结
- Remove Element
- 面向对象程序设计
- Android应用实例之----基于BroadCastReceiver的SD卡装载卸载实例!