JNI中使用cl命令生成DLL文件
问题描述:
在使用JNI调用DLL时,首先需要生成DLL文件
问题解决:
(1)现在使用VS2008的cl.exe程序,生成DLL文件
(1.1)cl.exe环境搭建

注:
cl.exe程序的位置在 VS安装目录的VC\bin目录下
直接运行上述程序时,程序会自动退出,正确的做法是,在系统环境变量中添加Include、path、lib路径



注:
以上分别是 VS2008中cl.exe程序在DOS下执行cl 命令需要进行的配置包括LIB、Path、INCLUDE
分别对应于VS2008 lib、bin、include目录

注:
进行如上配置之后,可以正常运行cl命令
(1.2)生成DLL文件
1)
注:
在使用cl命令生成DLL文件时,我们主要是为JNI调用服务,这里以Javah生成的头文件com_jni_HelloWorld.h为例

包含如上头文件的cpp文件如下:

注:
由于使用cl命令需要包含jni.h的头文件,我们将jdk中的jni.h和jni_md.h文件复制到VC2008\VC\include目录


注:
将jni.h 和jni_md.h复制到VC的include目录之下
2)在DOS 下执行命令

时,出现如下错误:
fatal error LNK1104: 无法打开文件“kernel32.lib
解决办法是:

注:
将C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib中的Kernel32.Lib文件拷贝到
VS2008安装目录的lib目录之下

3)生成dll文件

注:
在项目bin\目录之下,使用命令: cl -I %java_home%\include -I %java_home%\include\win32 -LD com_jni_HelloWorld.cpp -Fehello.dll
可以生成dll文件

注:

生成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 目录之下

注:
C:\Windows\System32是java可以访问到的路径

注:
成功访问到DLL文件
JNI中使用cl命令生成DLL文件的更多相关文章
- VS2010中使用CL快速 生成DLL的方法
方案一: 1.命令行中输入cl example.cpp,生成example.obj和example.lib文件.有可能还会提示“没有入口点”的错误.这是因为我们的CPP中是要生成dll文件的,并没有m ...
- 如何利用.snk文件生成DLL文件中的Publickeytoken
1.在该路径下C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin查找是否有sn.exe. 没有的话,从网上下载,注意需要的版本. 2.打开c ...
- vs2012中程序集生成无法自动在网站Bin目录下生成Dll文件?(已解决!)
最近,突然发现生成程序集后,网站bin目录下dll没有更新,也没有自动生成dll文件,通过近半个小时的摸索和实验,找到了解决方法: 1.右键网站,不是项目,选择[属性页],在左侧[引用]中如果没有,就 ...
- 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法
在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了“错误: 无法访问android.app.Activity 找不到android.app.Activity ...
- delphi中单独编译pas生成dcu文件
delphi中单独编译pas生成dcu文件 在网上下载了一个带源码的组件,结果碰到提示说缺少xxx.dcu.一看它的目录下确实没有,那能不能生成一个呢? 当然可以! 方法是使用delphi的安装目录\ ...
- C# 怎么生成DLL文件(转)
有两种方法: 但是一般这个使用 打开VS2008,依次点击:菜单->文件->新建项目->项目类型visual C#(这里假设为该项目所取的名字是DllBuild)-& ...
- (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译
Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译. 1.打开VS,博主所用版本是Visual Studio 2013. 2.新建一个VC项目 ...
- 使用VS2012生成DLL文件 (1)
一:生成DLL 1:创建DLL工程 文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以) 填写项目名称MyDLL ...
- 生成dll文件的示例
看了好多网上写的关于dll文件生成和实用的资料发现多尔不全,都是抄来抄去,有的干脆就是搬用msdn上的原文,实在没有创意和可看的东西.于是本着学和实用的目的自己实践的东西分享给大家. 大前提:使用VS ...
随机推荐
- OpenFiler安装与基本配置
一. 安装篇 1. 插入安装盘 2. 选择键盘输出 3. 对硬盘进行分区 4. 删除所有数据并重新分区 5. 配置IP地址等信息 ...
- JavaScript学习笔记 -- 带参数arguments的函数的用法
JavaScript函数有带参数与不带参数两种形式,不带参数情况如下: function myFunction() { alert('HelloWorld!') } 在这种类型的函数中,输出值是确定的 ...
- 判断Featureclass的类型
一个Featureclass可以是Shapefile Feature Class.Personal Geodatabase Feature Class.File Geodatabase Feature ...
- Codevs 1009 产生数
题目描述 Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规 ...
- chrome源码编译常见的错误解决
最近编译chrome浏览器源码时,下载源码和一般的设置,网络中都有说明,而且一般的说明都是类似的,然后都说编译成功了,但本人没有试成功,碰到常见的2个错误,记录下,不知道大家碰到没有. 1.pytho ...
- 简单工厂(Simple Pattern)模式
一.简单工厂(Simple Factory)模式 Simple Factory 模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple F ...
- 鼠标悬浮图片时弹出透明提示图层的jQuery特效
源码: <!doctype html> <html class="no-js" lang="en"> <head> < ...
- javascript框架库API入口
underscorejs : http://learning.github.io/underscore/
- jquery 1.6发布后,增加prop()方法部分取代attr()方法
以前的jq中,全部使用attr来访问对象的属性,比如取一个图片的alt属性,就可以这样做$('#img').attr('alt'); 但是在某些时候,比如访问checkbox的disabled属性 ...
- 常用HTML meta 标签属性(网站兼容与优化需要),meta标签
常用HTML meta 标签属性(网站兼容与优化需要),meta标签 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索 ...