C第三方库无法从JAVA加载配置(.ini)文件(使用SWIG / JNA连接)

时间:2016-08-01 03:42:19

标签: java c dll swig jna

test.cxx文件

 #include <stdio.h>
 #include "test.h"

 int __declspec(dllexport) openFile() {
 FILE * fp;

 fp = fopen ("file.txt", "r");

 if(fp == NULL) 
   return 0;

 fclose(fp);

return 1;
}

test.h文件:

 #ifndef __TEST_H__
 #define __TEST_H__
 #ifdef __cplusplus
  extern "C" {
 #endif
 int __declspec(dllexport) openFile();

 #ifdef __cplusplus
 }
 #endif // __cplusplus
 #endif

现在,如果我使用以下命令创建一个dll(test.dll)

  1. g ++ -c test.cxx
  2. g ++ -shared test.o -o test.dll
  3. 现在我将从Java访问dll。所以我使用SWIG创建一个包装器dll并访问dll函数。

    我的SWIG界面文件(example.i)

    %module example
    %{
    #include "example.h"
    #include "test.h"
    %}
    
    %include "windows.i"
    %include "example.h"
    %include "test.h"
    

    example.cxx文件:

      #include "example.h"
    

    example.h文件:

      #include "test.h"
    

    现在我使用以下命令

    创建包装器dll
    1. swig -c ++ -java example.i
    2. g ++ -c example.cxx example_wrap.cxx
    3. g ++ -shared example.o example_wrap.o -o example.dll -L。 Test.dll的
    4. 我的Java课程:

        public class main {
        static {
           System.loadLibrary("example");
        }
      
        public static void main(String argv[]) {
             System.out.println(example.openFile());
        }
        }
      

      当我按照命令

      运行Java代码时
      1. javac main.java
      2. java main
      3. 然后jvm崩溃..可能是什么问题?看起来当C试图打开文件时,JVM崩溃了。

0 个答案:

没有答案