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程序
$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之生成动态库
演示源码下载地址: https://github.com/mohistH/demo_cmake_dylib 把文仅为参考. 以实际情况为准 1.目录结构 │ CMakeLists.txt │ inde ...
- Unity跨平台C/CPP动态库编译---可靠UDP网络库kcp基于CMake的各平台构建实践
1.为什么需要动态库 a)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. b)某 ...
- Unity3D跨平台动态库编译---记kcp基于CMake的各平台构建实践
一 为什么需要动态库 1)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. 2)某 ...
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- (转)HelloWorld CMake CMake中构建静态库与动态库及其使用
继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello ...
- 1. CMake 系列 - 从零构建动态库和静态库
目录 1. 文件目录结构 2. 库文件源代码 3. 编译生成库文件 1. 文件目录结构 首先创建如下目录结构: └── lib ├── build # ├── CMakeLists.txt └── s ...
- CMake设置生成vs工程的动态库输出路径
作者:朱金灿 来源:http://blog.csdn.net/clever101 在网上搜了很多的资料,发现CMake不能设置一个动态库工程的输出目录和中间目录,难道除了VC之外其它编译器如gcc中没 ...
- 1、opencv3.3.0和cmake安装步骤(按照以下步骤安装后仅能在PC上运行,动态库也是PC端的属性)
1.下载安装CMake for Linux 下载地址:https://cmake.org/download/ 我下载的版本是,下载文件cmake-3.11.1.tar.gz ./bootstrap m ...
- cmake配置项目引用动态库
note 本文将介绍使用FIND_PACKAGE配置项目动态库的方法 cmake version: 3.18 platform: win10 20H2 概述 创建了一个动态库,再由主项目调用该动态库. ...
随机推荐
- 使用python制作二维码
python-qrcode是个用来生成二维码图片的第三方模块,主要依赖的是 PIL 模块和 qrcode 库.(PIL模块只支持python2.7及以下版本,python3之后无法使用,官方推荐pyt ...
- selenium 窗口句柄之间的切换
以前使用selenium时都是在单窗口的模式下,本次新增多窗口下的窗口之间切换 from selenium import webdriver from selenium.webdriver.commo ...
- CCF模拟 无线网络
无线网络 时间限制: 1.0s 内存限制: 256.0MB 问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上.任何两个无线路由器只要距离不超过 r 就能互相 ...
- 洛谷 P1460 健康的荷斯坦奶牛 Healthy Holsteins
P1460 健康的荷斯坦奶牛 Healthy Holsteins 题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保 ...
- 洛谷 P1716 双调序列
P1716 双调序列 题目描述 电脑组的童鞋们经常玩一些智力PK小游戏,某月某日,发源于小朋友又发明了一种新的序列:双调序列,所谓的双调呢主要是满足如下条件描述: 假定有n(n<=1000)个整 ...
- 关于getinstalledpackages參数的分析。
此blog不写API的使用方法仅仅分析此參数的知识点. 今天学习安卓突然学习到了getinstalledpackages()的方法获取到安装应用信息 ,他接收一个int flags的值.然后在网上查询 ...
- myeclipse中断点调试
在代码最左端,也就是行号位置处双击.会出现一个实心小圆点.即增加的断点.debug启动程序,就会运行到断点处: 按F5是进去方法里面. 按F6是一步一步走, 按F7是跳出方法里面(按F5后再按F7就跳 ...
- 稀疏表示字典的显示(MATLAB实现代码)
本文主要是实现论文--基于稀疏表示的图像超分辨率<Image Super-Resolution Via Sparse Representation>中的Figure2.通过对100000个 ...
- OSX: 禁止iCloud钥匙链?
自从10.9有了一个新的功能叫viewlocale=zh_CN">iCloud钥匙串的,就出现了不少的麻烦.一是在10.9.3之前.好多人出现无限循环地要求用户输入Local item ...
- es6 --- Generator 函数
第一部分,ES6 中的 Generator 在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路, ...