CMake - SWIG - 移植动态库
CMake - SWIG
最后更新日期:2014-04-25 bykagula
阅读前提:《CMake入门(二)》、《同Java的混合编程-SWIG》、Linux的基本操作、java基础知识
环境:Windows 8.1 64bit英文版,Visual Studio 203 Update1英文版,CMake 2.8.12.2、 Cent OS 6.5、SWIG 3.0.0。
内容简单介绍
介绍本人在《同Java的混合编程-SWIG》这篇笔记上提到的SWIG_Tutorial4和SWIG_Tutorial4_Java项目怎样移到Cent OS上。
正文
用Visual Studio打开SWIG_Tutorial4项目。在项目中加入CMakeLists.txt文件
#设置项目名称
PROJECT(SWIG_Tutorial4)
#要求CMake的最低版本号为2.8
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
#加入头文件搜索路径
#以下两个是Cent OS下Java开发包的默认头文件路径
INCLUDE_DIRECTORIES(/usr/lib/jvm/java/include)
INCLUDE_DIRECTORIES(/usr/lib/jvm/java/include/linux)
#加入库文件搜索路径
#以下两个是Cent OS下Java开发包的默认库文件路径
LINK_DIRECTORIES(/usr/lib/jvm/java/lib)
#用于将当前目录下的全部源文件的名字保存在变量 DLL_SRC中
AUX_SOURCE_DIRECTORY(. DLL_SRC)
#用于指定从一组源文件 source1 source2 …sourceN(在变量DLL_SRC中定义)
#依据“SWIG_Tutorial4”名称编译出“libSWIG_Tutorial4.so”名称的动态链接库
#假设以下不加SHARED那编译出的是“libSWIG_Tutorial4.a”静态链接库
ADD_LIBRARY(SWIG_Tutorial4SHARED ${DLL_SRC})
在Cent OS上安装java开发环境
#yum install java java-devel
能够使用以下的命令查看java 安装路径
$echo$JAVA_HOME
把SWIG_Tutorial4项目整个目录,拷贝到Cent OS上,并编译
$cd SWIG_Tutorial4
$mkdir build
$cd build
$cmake ..
$make
如今当前目录中就有了libSWIG_Tutorial4.so文件。 Linux下的动态链接库一般用so扩展名,相当于Windows下的DLL文件。
測试动态链接库
Cents OS下java.library.path缺省指向/usr/java/packages/lib/i386、/lib、/usr/lib三个目录。java程序会从这三个路径中去寻找动态链接库。所以我们把libSWIG_Tutorial4.so文件拷贝到/usr/lib路径中。
把Win系统上的SWIG_Tutorial4_Java项目整个源目录上传到Cent OS系统。
以下是SWIG_Tutorial4_Java项目目录树
SWIG_Tutorial4_Java
│ .classpath
│ .project
│ SWIG_Tutorial4.dll
│
├─.settings
│org.eclipse.jdt.core.prefs
│
├─bin
│ HelloWorldFromC.class
│ MyJavaClass.class
│ SWIG_Tutorial4.class
│ SWIG_Tutorial4JNI.class
│
└─src
HelloWorldFromC.java
MyJavaClass.java
SWIG_Tutorial4.java
SWIG_Tutorial4JNI.java
进入以下目录
/home/kagula/Downloads/SWIG_Tutorial4_Java/bin
能够看到
HelloWorldFromC.class, MyJavaClass.class, SWIG_Tutorial4.class,SWIG_Tutorial4JNI.class四个文件。
使用以下的命令。调用java程序
$javaMyJavaClass
就能够看到程序执行结果
參考资料
[1]《Tokyo Cabinet的安装,含Java版(Cent OS 5.4)》
http://www.coder4.com/archives/818
[2]《JNI Hello World 简单记录》-使用Open JDK + GCC做的第一个java程序
http://blog.csdn.net/acnt3w/article/details/8590300