zoukankan      html  css  js  c++  java
  • JNI中使用cl命令生成DLL文件

    问题描述:

        在使用JNI调用DLL时,首先需要生成DLL文件

    问题解决:

        (1)现在使用VS2008的cl.exe程序,生成DLL文件

    (1.1)cl.exe环境搭建

    clipboard

    注:

      cl.exe程序的位置在 VS安装目录的VCin目录下

        直接运行上述程序时,程序会自动退出,正确的做法是,在系统环境变量中添加Include、path、lib路径

    clipboardclipboardclipboard

    注:

        以上分别是 VS2008中cl.exe程序在DOS下执行cl 命令需要进行的配置包括LIB、Path、INCLUDE

    分别对应于VS2008    lib、bin、include目录

    clipboard

    注:

        进行如上配置之后,可以正常运行cl命令

    (1.2)生成DLL文件

                1)

    注:

        在使用cl命令生成DLL文件时,我们主要是为JNI调用服务,这里以Javah生成的头文件com_jni_HelloWorld.h为例

    clipboard

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

    clipboard

    注:

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

    clipboard

    clipboard

    注:

        将jni.h 和jni_md.h复制到VC的include目录之下

            2)在DOS 下执行命令

    clipboard

    时,出现如下错误:

    fatal error LNK1104: 无法打开文件“kernel32.lib

    解决办法是:

    clipboard

    注:

        将C:Program FilesMicrosoft SDKsWindowsv6.0ALib中的Kernel32.Lib文件拷贝到

        VS2008安装目录的lib目录之下

    clipboard

        3)生成dll文件

    clipboard

    注:

        在项目bin目录之下,使用命令:   cl   -I   %java_home%include   -I    %java_home%includewin32   -LD    com_jni_HelloWorld.cpp    -Fehello.dll 

    可以生成dll文件

    clipboard

    注:

    clipboard

      生成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%includewin32   -LD    com_jni_HelloWorld.cpp        

    XXXX.cpp   ....(cpp文件)     -Fehello.dll 

      4)运行java项目

    将生成的hello.dll文件放置在C:WindowsSystem32 目录之下

    clipboard

    注:

        C:WindowsSystem32是java可以访问到的路径

    clipboard

    注:

        成功访问到DLL文件

  • 相关阅读:
    敏捷开发系列学习总结(5)——这几招搞定团队协同Coding
    敏捷开发系列学习总结(4)—Git管理工具sourcetree的安装
    Java基础学习总结(74)——Java常见笔试题及答案汇总
    iOS 极光推送
    iOS UI控件没有显示时的调试技巧
    iOS 搜索之拼音搜索
    iOS MJExtension框架之字典数组转模型数组
    iOS 单例
    iOS 切换键盘
    iOS 正则表达式
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3220324.html
Copyright © 2011-2022 走看看