java - SWIG CYGWIN DLL 链接

标签 java gcc java-native-interface cygwin swig

我正在尝试遵循位于 here 的 SWIG Java 示例。本例使用cygwin进行编译。我想向编译器传递一个已编译的 dll、test.dll,而不是 C 源文件。 SWIG.org 示例使用 C 源代码。我尝试将 test.dll(编译的 C 源代码)和 example.dll 传递给第三个命令,但出现错误“test.dll:没有这样的文件或目录”。 SWIG.org 示例的第三个命令基于 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

最佳答案

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

请注意,链接线上对象和 DLL 的顺序很重要。 DLL 应该位于使用它们的任何内容之后。

关于java - SWIG CYGWIN DLL 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8772477/

相关文章:

c++ - 在 GCC 中关闭 COW

java - 将 unicode 字符从 native 字符转换为 Java 字符时出现问题

java - 错误: MyGestureDetector cannot be resolved to a type.如何解决?

java - 我用这个 ant 构建文件创建 Web 服务客户端做错了什么?

c++ - gcc -I 不更改包含目录

编译器错误导致 execve 失败?

java - 在 JNI 中,如何从 native 代码访问静态 Java 变量

java - java调用dll文件的方法

java - 在Maven中获取executionId

java - 如何在设置约束的情况下将按钮的背景设置为随机颜色?