开源GIS实验田

OpenSource GIS Space

  • 内容导航

    Creative Commons
    本站文章全部原创
    转载请遵循创作共用协议
  • 最新评论

    • Gao Ang: 《OSGeo开源地理信息项目最新进展》...
    • Zhu Xiaoyang: 你好!我参加了您的讲座,想向您索...
    • Gao Ang: zhangtujin,OSGeo中国组织的所有讲座活...
    • zhangtujin: 请问个问题,今天报名参加了讲座,...
    • zhaoyang: 谢谢你,很实用。请问有没有Endnote文...
  • 热门主题

  • 随机阅读

    • 三月 2010
      « Feb    
      1234567
      891011121314
      15161718192021
      22232425262728
      293031  
    • GaoAng Profile

      GaoMiao's Portrait
      有了理想
      就不要寻找放弃的理由

      站点搜索

    • 只言片语

      “We all agree that your theory is crazy, but is it crazy enough?”-Niels Bohr (1885-1962)
    • 命运,不过是失败者无聊的自慰,不过是懦怯者的解嘲。人们的前途只能靠自己的意志、自己的努力来决定。 ——茅盾

    Java本地调用C/C++的动态库

    21st 三月 2007

    作者: Gao Ang 可以转载,请以超链接标明原始出处和作者信息及版权声明
    网址: http://www.gaoang.com/archives/41

    前段日子投身考博的复习,文章更新不太及时。总算告一段落,于是开始着手实现基于Java的OGC WPS规范,为了方便使用SVN存储库进行代码管理以及尝试一下Tomcat 6的新功能,IDE采用了Netbeans 6.0 M7版本。

    关于WPS的Java实现,计划中的三部分工作是:1.改进已有WPS的实现,简化算法的XML配置,集成Geotools的空间分析函数,从中选择增加新的WPS操作到Algorithm库中。2.参考pyWPS的命令行调用方式,在Linux下通过Java IO包里的Runtime.getRuntime().exec()方法给GRASS命令行传入执行参数,通过命令调用的方式将GRASS的功能进行服务化提升。3.通过本地接口JNI来调用已独立封装好的GRASS API,直接将参数传入so动态库,通过GRASS的动态库来获得地理数据分析功能。目前第一和第二步的技术路子已经走通,第三步实现则较为复杂,预计可能需要做不少工作。

    本地接口(Java Native Interface)是JDK的一部分,允许Java 代码使用以其它语言编写的代码和代码库。关于JNI的详细使用方法,可以找到不错的教程,在IBM DeveloperWorks上,也有关于Linux下使用本地接口的文章。JNI将Java 虚拟机嵌入本机应用程序,可以实现从Java 程序调用C/C++以及从C/C++程序调用Java代码。本机方法调用C的动态库,需要使用Javah命令重新生成引用C/C++源文件的头文件,定义JNI 的库文件和本机头文件,首先在Java类中声明要调用的本机语言方法,并载入包含本机代码的共享库,然后调用类库中的本机方法。

    目前Java开发使用的IDE逐渐从EclipseNetbeans过渡,相比较来说,Netbeans近来的发展势头让人看到Java IDE新的希望,无论在功能上还是在代码感知的响应速度上都不亚于Eclipse,作为用于代码编写的环境,在不安装任何各式庞杂插件的基础上,可以带给程序员不错的体验。

    6 Responses to “Java本地调用C/C++的动态库”

    1. csm Says:

      可以考虑用GlueGen
      GlueGen is a tool which automatically generates the Java and JNI code necessary to call C libraries. It reads as input ANSI C header files and separate configuration files which provide control over many aspects of the glue code generation. GlueGen uses a complete ANSI C parser and an internal representation (IR) capable of representing all C types to represent the APIs for which it generates interfaces. It has the ability to perform significant transformations on the IR before glue code emission. GlueGen is currently powerful enough to bind even low-level APIs such as the Java Native Interface (JNI) and the AWT Native Interface (JAWT) back up to the Java programming language.

    2. Gao Ang Says:

      谢谢你,因为JNI使用比较繁琐,正在看有没有什么可以代替的方式
      最近在开始写毕业论文了,边写边做

    3. Ricepig Says:

      代码感知的响应速度,NetBeans比Eclipse好太多了。不过都没法和VS和Emacs比。

    4. Gao Ang Says:

      代码感知响应确实很重要,最近做了一个Netbeans富客户端的例子,感觉界面表现也还不错

    5. zhangyi Says:

      你好 我想问下关于在java里面调用grass的问题
      1 调用
      比如v.buffer 我应该写成是 exev(”v.buffer input=# output=#…”);
      这种方式吗? 但我自己在win下面发现 这种buffer类型的处理小程序不是可以独立运行的

      2 处理结果 在服务端接收到用户的一个featuecellction 进行缓冲 在grass处理后直接是保存在本地一个文件中 就是执行时候 output的参数,怎么转化成为xml(gml)返回给客户端呢?

    6. Gao Ang Says:

      1、在Linux下面需要先调用命令行启动Grass的基础运行时,并加载spearfish这样的数据集,之后再使用命令行调用类似v.buffer这样的命令执行。win下面还没有尝试过,好像Grass对Win支持不友善。但是命令行调用并不是好的办法,而且会影响效率。
      2、如果希望得到GML的返回,是不是可以考虑在服务端使用WFS的形式将结果数据发布呢
      关于GRASS服务调用,可以看一下GMU所做的工作
      http://geobrain.laits.gmu.edu/doc/grassBPEL.htm

    Leave a Reply

    XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>