JNI中应用cl号令生成DLL文件
添加时间:2013-7-29 点击量:
题目描述:
    在应用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调用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文件
原来,再大的房子,再大的床,没有相爱的人陪伴,都只是冰冷的物质。而如果身边有爱人陪伴,即使房子小,床小,也觉得无关紧要,因为这些物质上面有了爱的温度,成了家的元素。—— 何珞《婚房》#书摘#