SWIG - 使用cygwin包含现有的静态C ++库(.lib)

时间:2012-05-22 13:20:06

标签: java c++ cygwin swig

我目前正在开发一个Java项目,它将被添加到现有的更大系统中。与系统的通信是基于XML的网络连接。

问题是这个系统是用C ++编写的,他们提供给我们的库是为了与系统通信,它是一个基于C ++的静态库(.lib)。我们有该库的头文件,因此我能够使用SWIG生成.java和相应的包装文件。

现在我遇到的问题是如何在我的.dll中包含这个静态库,它将用于从Java程序接收JNI调用。

我如何调用gcc来生成工作dll?如果不访问图书馆的资源,甚至可以做到这一点吗?

提前感谢任何有用的答案。

1 个答案:

答案 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的构建方式)