CMake - SWIG - 移植动态库

Posted zhchoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 OSJava开发包的默认头文件路径

INCLUDE_DIRECTORIES(/usr/lib/jvm/java/include)

INCLUDE_DIRECTORIES(/usr/lib/jvm/java/include/linux)

?

#加入库文件搜索路径

#以下两个是Cent OSJava开发包的默认库文件路径

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程序

$java?MyJavaClass

就能够看到程序执行结果

?

參考资料

[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

以上是关于CMake - SWIG - 移植动态库的主要内容,如果未能解决你的问题,请参考以下文章

CMake 学习四:CMake 构建静态库和动态库

Python3调用C/C++动态库(使用SWIG)

Python3调用C/C++动态库(使用SWIG)

python import swig库失败,动态模块没有定义init函数

如何使用cmake生成基于静态库的动态链接库

从父 cmake 动态/静态库构建 cmake 静态库的最佳方法