通过 SWIG 链接 C++ 和 Java GUI
Posted
技术标签:
【中文标题】通过 SWIG 链接 C++ 和 Java GUI【英文标题】:C++ and Java GUI linkage through SWIG 【发布时间】:2011-08-12 14:35:06 【问题描述】:我正在尝试在我的 jTabbedPane 项目中包含一个名为 Avogadro (1) 的计算化学/物理可视化工具。我使用 QT Jambi (1) 在 Eclipse 中从 Avogadro 的 UI 创建了一个 JUI (Java GUI)。我在那次尝试中成功了,但是 GUI 在运行时(显然没有功能)。
简而言之,这里的复杂性是我试图访问一个只能使用 CMake 编译的大型项目的 C++ 库(导入 Eclipse 不成功)。更糟糕的是,我认为我需要与之交互的只是一个 .cpp 文件,该文件规范 GUI 并将其链接到项目的其余部分,从而提供功能。我计划使用 SWIG 与上述 cpp 文件中的函数进行交互,并且我计划使该接口与 C++ 库一起工作,以向 Java GUI 添加功能。
对我如何做到这一点有任何想法吗?我需要 SWIG 整个项目吗?
【问题讨论】:
将所有算法库编译为静态库,然后再次用 C++ 编写 JNI 胶水(包括共享库),这将是您的“调节 GUI 的.cpp 文件”。稍微调试一下,找出丢失的符号和 UnsatisfiedLinkErrors,你就会拥有 Java - C++ 接口 我可以用什么来制作 JNI 胶水?痛饮? 有一些工具,但我建议从头开始编写。查看有关 JNI 示例等的一些教程,最终,您将在 JNI_OnLoad 函数中注册相关函数。它真的很简单(不需要 SWIG) 【参考方案1】:看起来 Avogadro 是开源的。因此,您可以下载源代码并 SWIG 整个项目。这将在 Java 中为您提供与在 C++ 中相同的类。
如果您只想要 Avogadro 功能的一个子集,我建议在 C++ 中创建一个简单的桥接类。然后可以对这个桥接类以及可能的其他帮助类进行 SWIGed。您的 Java 现在将使用桥接类来执行 Avogadro 库。
【讨论】:
以上是关于通过 SWIG 链接 C++ 和 Java GUI的主要内容,如果未能解决你的问题,请参考以下文章
动态链接和 Python SWIG (C++) 在 C++ 中工作在 python 中失败