JNI中使用cl命令生成DLL文件
2013-12-27 18:44
288 查看
问题描述:
在使用JNI调用DLL时,首先需要生成DLL文件
问题解决:
(1)现在使用VS2008的cl.exe程序,生成DLL文件
(1.1)cl.exe环境搭建
![](http://www.th7.cn/d/file/p/2013/07/27/8f9d7808ae6cf41bd8015f133a1ac89c.png)
注:
cl.exe程序的位置在 VS安装目录的VC/bin目录下
直接运行上述程序时,程序会自动退出,正确的做法是,在系统环境变量中添加Include、path、lib路径
![](http://www.th7.cn/d/file/p/2013/07/27/b5718c9156876d1b9c8d459aa00003dc.png)
![](http://www.th7.cn/d/file/p/2013/07/27/730dc09139d4067e1052b4f4650873c5.png)
![](http://www.th7.cn/d/file/p/2013/07/27/0606badb86580e441c71042353fdfbaa.png)
注:
以上分别是 VS2008中cl.exe程序在DOS下执行cl 命令需要进行的配置包括LIB、Path、INCLUDE
分别对应于VS2008 lib、bin、include目录
![](http://www.th7.cn/d/file/p/2013/07/27/cf6311b8ce71a4be0e5f322509b5067c.png)
注:
进行如上配置之后,可以正常运行cl命令
(1.2)生成DLL文件
1)
注:
在使用cl命令生成DLL文件时,我们主要是为JNI调用服务,这里以Javah生成的头文件com_jni_HelloWorld.h为例
![](http://www.th7.cn/d/file/p/2013/07/27/b1db88368733de8a4215a974700658a3.png)
包含如上头文件的cpp文件如下:
![](http://www.th7.cn/d/file/p/2013/07/27/55bf486a462d720b2ad3a22a72a7f223.png)
注:
由于使用cl命令需要包含jni.h的头文件,我们将jdk中的jni.h和jni_md.h文件复制到VC2008/VC/include目录
![](http://www.th7.cn/d/file/p/2013/07/27/704d1976d2820661cb32da06ac3d7bfa.png)
![](http://www.th7.cn/d/file/p/2013/07/27/53955960cac52b6ad6336fa8405b24a3.png)
注:
将jni.h 和jni_md.h复制到VC的include目录之下
2)在DOS 下执行命令
![](http://www.th7.cn/d/file/p/2013/07/27/a58944320a8f798247eac8b342452d63.png)
时,出现如下错误:
fatal error LNK1104: 无法打开文件“kernel32.lib
解决办法是:
![](http://www.th7.cn/d/file/p/2013/07/27/b1cc73bba390bfe66bee6b1475baaec0.png)
注:
将C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib中的Kernel32.Lib文件拷贝到
VS2008安装目录的lib目录之下
![](http://www.th7.cn/d/file/p/2013/07/27/be885849aca5e54e0d75f4b3f236611e.png)
3)生成dll文件
![](http://www.th7.cn/d/file/p/2013/07/27/bcb0e6a6c3dda2587bb8b28b8658b8b1.png)
注:
在项目bin/目录之下,使用命令: cl -I %java_home%/include -I %java_home%/include/win32 -LD com_jni_HelloWorld.cpp -Fehello.dll
可以生成dll文件
![](http://www.th7.cn/d/file/p/2013/07/27/24755251fe388186d378f74cfd256437.png)
注:
![](http://www.th7.cn/d/file/p/2013/07/27/4ecb49b01cd10305d6c4727291df5bb8.png)
生成DLL文件的命令解释如下:
VS开发环境默认不会识别jni.h头文件,在JDK中找到jni.h,并添加jni.h所在目录到当前工作路径:右键项目,属性-通用属性-C/C++-常规项在右边的附加包含目录中把%JAVA_HOME%/include和%JAVA_HOME%/include/win32加进来。
命令中 -I 是链接的意思 -Fehello.dll后面是生成的dll名称为hello.dll -LD是创建动态链接库的选项
注:
多个文件形式创建DLL文件
cl -I %java_home%/include -I %java_home%/include/win32 -LD com_jni_HelloWorld.cpp
XXXX.cpp ....(cpp文件) -Fehello.dll
4)运行java项目
将生成的hello.dll文件放置在C:/Windows/System32 目录之下
![](http://www.th7.cn/d/file/p/2013/07/27/7365b1126c9acafa1f8e650a56f78e2a.png)
注:
C:/Windows/System32是java可以访问到的路径
![](http://www.th7.cn/d/file/p/2013/07/27/fb2778ef9982590db33188a9df9fcf5f.png)
注:
成功访问到DLL文件
在使用JNI调用DLL时,首先需要生成DLL文件
问题解决:
(1)现在使用VS2008的cl.exe程序,生成DLL文件
(1.1)cl.exe环境搭建
![](http://www.th7.cn/d/file/p/2013/07/27/8f9d7808ae6cf41bd8015f133a1ac89c.png)
注:
cl.exe程序的位置在 VS安装目录的VC/bin目录下
直接运行上述程序时,程序会自动退出,正确的做法是,在系统环境变量中添加Include、path、lib路径
![](http://www.th7.cn/d/file/p/2013/07/27/b5718c9156876d1b9c8d459aa00003dc.png)
![](http://www.th7.cn/d/file/p/2013/07/27/730dc09139d4067e1052b4f4650873c5.png)
![](http://www.th7.cn/d/file/p/2013/07/27/0606badb86580e441c71042353fdfbaa.png)
注:
以上分别是 VS2008中cl.exe程序在DOS下执行cl 命令需要进行的配置包括LIB、Path、INCLUDE
分别对应于VS2008 lib、bin、include目录
![](http://www.th7.cn/d/file/p/2013/07/27/cf6311b8ce71a4be0e5f322509b5067c.png)
注:
进行如上配置之后,可以正常运行cl命令
(1.2)生成DLL文件
1)
注:
在使用cl命令生成DLL文件时,我们主要是为JNI调用服务,这里以Javah生成的头文件com_jni_HelloWorld.h为例
![](http://www.th7.cn/d/file/p/2013/07/27/b1db88368733de8a4215a974700658a3.png)
包含如上头文件的cpp文件如下:
![](http://www.th7.cn/d/file/p/2013/07/27/55bf486a462d720b2ad3a22a72a7f223.png)
注:
由于使用cl命令需要包含jni.h的头文件,我们将jdk中的jni.h和jni_md.h文件复制到VC2008/VC/include目录
![](http://www.th7.cn/d/file/p/2013/07/27/704d1976d2820661cb32da06ac3d7bfa.png)
![](http://www.th7.cn/d/file/p/2013/07/27/53955960cac52b6ad6336fa8405b24a3.png)
注:
将jni.h 和jni_md.h复制到VC的include目录之下
2)在DOS 下执行命令
![](http://www.th7.cn/d/file/p/2013/07/27/a58944320a8f798247eac8b342452d63.png)
时,出现如下错误:
fatal error LNK1104: 无法打开文件“kernel32.lib
解决办法是:
![](http://www.th7.cn/d/file/p/2013/07/27/b1cc73bba390bfe66bee6b1475baaec0.png)
注:
将C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib中的Kernel32.Lib文件拷贝到
VS2008安装目录的lib目录之下
![](http://www.th7.cn/d/file/p/2013/07/27/be885849aca5e54e0d75f4b3f236611e.png)
3)生成dll文件
![](http://www.th7.cn/d/file/p/2013/07/27/bcb0e6a6c3dda2587bb8b28b8658b8b1.png)
注:
在项目bin/目录之下,使用命令: cl -I %java_home%/include -I %java_home%/include/win32 -LD com_jni_HelloWorld.cpp -Fehello.dll
可以生成dll文件
![](http://www.th7.cn/d/file/p/2013/07/27/24755251fe388186d378f74cfd256437.png)
注:
![](http://www.th7.cn/d/file/p/2013/07/27/4ecb49b01cd10305d6c4727291df5bb8.png)
生成DLL文件的命令解释如下:
VS开发环境默认不会识别jni.h头文件,在JDK中找到jni.h,并添加jni.h所在目录到当前工作路径:右键项目,属性-通用属性-C/C++-常规项在右边的附加包含目录中把%JAVA_HOME%/include和%JAVA_HOME%/include/win32加进来。
命令中 -I 是链接的意思 -Fehello.dll后面是生成的dll名称为hello.dll -LD是创建动态链接库的选项
注:
多个文件形式创建DLL文件
cl -I %java_home%/include -I %java_home%/include/win32 -LD com_jni_HelloWorld.cpp
XXXX.cpp ....(cpp文件) -Fehello.dll
4)运行java项目
将生成的hello.dll文件放置在C:/Windows/System32 目录之下
![](http://www.th7.cn/d/file/p/2013/07/27/7365b1126c9acafa1f8e650a56f78e2a.png)
注:
C:/Windows/System32是java可以访问到的路径
![](http://www.th7.cn/d/file/p/2013/07/27/fb2778ef9982590db33188a9df9fcf5f.png)
注:
成功访问到DLL文件
相关文章推荐
- IOS开发常用数学函数
- SQL无法连接到 (local)。在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连
- IMSI概念解释
- “断章不取义”
- linux sed
- linux socket下send()&recv()调用
- Jdk1.7环境变量的配置
- ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等
- 【36】绝不重新定义继承而来的non-virtual方法
- 算法导论第5章5.4概率分析和随机算法
- [iOS开发]推翻错误结论——“Block可以捕获它的声明所在相同作用域的状态。”
- 双引号和单引号
- 用ElasticSearch存储日志
- linux核心版本号的说明
- linux核心版本号的说明
- linq转载
- 监听的instance status blocked分析
- 从 Java 代码调用 C/C++ 的六个步骤
- 排序算法(七):归并排序
- 将阿拉伯数字钱格式转换成中文格式