我目前正在开发一个Java项目,它将被添加到现有的更大系统中。与系统的通信是基于XML的网络连接。
问题是这个系统是用C ++编写的,他们提供给我们的库是为了与系统通信,它是一个基于C ++的静态库(.lib
)。我们有该库的头文件,因此我能够使用SWIG生成.java
和相应的包装文件。
现在我遇到的问题是如何在我的.dll
中包含这个静态库,它将用于从Java程序接收JNI调用。
我如何调用gcc来生成工作dll?如果不访问图书馆的资源,甚至可以做到这一点吗?
提前感谢任何有用的答案。
答案 0 :(得分:0)
这绝对有可能 - 当您使用SWIG生成的包装器编译和链接DLL时,您将需要执行以下操作:
g++ -Wall -Wextra -shared -o test.dll test_wrap.cxx -Wl,--whole-archive some.lib
这里的关键是你将SWIG包装代码生成的DLL与你所拥有的.lib链接起来。 (我没有太多地使用cygwin,但你也可能想在此实例中将-mno-cygwin
添加到编译器标志中,具体取决于.lib的构建方式)