Gcc 为SWIG打包的简单Java示例(Windows)创建共享库DLL时出错

Gcc 为SWIG打包的简单Java示例(Windows)创建共享库DLL时出错,gcc,mingw,swig,Gcc,Mingw,Swig,我已经阅读了SWIG常见问题解答和动态模块文档,在决定如何为Windows构建JNI共享库dll时,似乎有很多选项。使用Visual C++的非常老版本来描述该过程。每个人都在用什么 我已经在Windows 7上安装了MinGW和下面的命令,并在SWIG simple java示例上运行了下面的命令,请参见下面的: example_wrap.o:example_wrap.c:(.text+0xa9): undefined reference to `gcd' example_wrap.o:exa

我已经阅读了SWIG常见问题解答和动态模块文档,在决定如何为Windows构建JNI共享库dll时,似乎有很多选项。使用Visual C++的非常老版本来描述该过程。每个人都在用什么

我已经在Windows 7上安装了MinGW和下面的命令,并在SWIG simple java示例上运行了下面的命令,请参见下面的:

example_wrap.o:example_wrap.c:(.text+0xa9): undefined reference to `gcd'
example_wrap.o:example_wrap.c:(.text+0xe2): undefined reference to `Foo'
example_wrap.o:example_wrap.c:(.text+0xe8): undefined reference to `Foo'
example_wrap.o:example_wrap.c:(.text+0x107): undefined reference to `Foo'
example_wrap.o:example_wrap.c:(.text+0x10d): undefined reference to `Foo'
collect2: ld returned 1 exit status
  • C:\swig\swigwin-2.0.4\Examples\java\simple>swig-java-example.i
  • C:\swig\swigwin-2.0.4\Examples\java\simple>gcc-C example\u wrap.C-ic:\Program F iles\Java\jdk1.6.0\u 30\include-ic:\Program Files\Java\jdk1.6.0\u 30\include\win32
  • C:\swig\swigwin-2.0.4\Examples\java\simple>gcc-sharedexample\u wrap.o-o example.dll
最后一个命令出错,错误为:

example_wrap.o:example_wrap.c:(.text+0xa9): undefined reference to `gcd'
example_wrap.o:example_wrap.c:(.text+0xe2): undefined reference to `Foo'
example_wrap.o:example_wrap.c:(.text+0xe8): undefined reference to `Foo'
example_wrap.o:example_wrap.c:(.text+0x107): undefined reference to `Foo'
example_wrap.o:example_wrap.c:(.text+0x10d): undefined reference to `Foo'
collect2: ld returned 1 exit status

看起来您要么没有编译,要么没有链接example.c,只有example\u wrap.c。您需要执行以下操作:

swig -java example.i gcc -c example_wrap.c -I somepath -I someotherpath gcc -c example.c -I somepath -I someotherpath gcc -shared example_wrap.o example.o -o example.dll swig-javaexample.i gcc-c示例_wrap.c-I somepath-I someotherpath gcc-c示例.c-I somepath-I someotherpath gcc-sharedexample\u wrap.o example.o-o example.dll
这修复了错误并生成了dll,但dll似乎没有包含正确的函数,因为在运行SWIG java简单示例时,线程“main”java.lang.UnsatisfiedLinkError:exampleJNI.gcd(II)I中出现异常。一切都可以在Linux上运行,因此可能存在一些额外的编译参数或Windwos问题。有什么想法吗?@c12-我不是Windows DLL构建问题的专家,但我认为您需要将其标记为DLLEXPORT和/或显式使用stdcall-