SWIG CYGWIN DLL链接

时间:2012-01-07 19:39:14

标签: java gcc java-native-interface cygwin swig

我正在尝试关注位于here的SWIG Java示例。此示例使用cygwin进行编译。我想通过编译器传递alredy编译的dll,test.dll,而不是C源文件。 SWIG.org示例使用C源代码。我试图将test.dll(已编译的C源代码)和example.dll传递给第3个命令,但是我收到错误“test.dll:没有这样的文件或目录”。 SWIG.org示例的第3个命令基于example.c创建example.dll。如何创建example.dll以便它使用test.dll而不是example.c?

有没有办法在这个例子的上下文中完成这个?

我的尝试没有C源,只需要dll:

  

$ swig -java example.i

     

$ gcc example_wrap.c -I / c / jdk1.6.0_30 / include -I / c / jdk1.6.0_30 / include / win32

     

$ gcc -shared example_wrap.o -mno-cygwin -Wl, - add-stdcall-alias -o test.dll example.dll

SWIG.org示例代码:

$ swig -java example.i
$ gcc **-c example.c** example_wrap.c -I/c/jdk1.3.1/include -I/c/jdk1.3.1/include/win32
$ gcc -shared example.o  example_wrap.o -mno-cygwin -Wl,--add-stdcall-alias  -o example.dll

1 个答案:

答案 0 :(得分:1)

您需要将test.dll传递给最后一个命令,该命令链接您的程序,而不是第二个编译example_wrap.c源文件的命令。 (-c选项告诉gcc只编译。)

请注意,链接行上的对象和DLL的排序很重要。 DLL应该在使用它们的任何东西之后。