繁体   English   中英

Java / Python的动态链接库可以在C / C ++中访问?

[英]Dynamic Link Library for Java/Python to access in C/C++?

一个快速的问题似乎与众不同。 (相反)

而不是从解释的语言调用本机代码; 有没有一种方法可以将Java或Python代码编译为.dll / .so并从C / C ++调用代码?

我愿意接受甚至答案,例如手动生成解释器或JVM,并强制其读取.class / .py文件。 (这是一个好的解决方案吗?)

谢谢。

您可以在C / C ++程序中嵌入Python解释器。

http://docs.python.org/2/extending/embedding.html

使用Java,您可能需要Java本机接口(双向可用)。

http://en.wikipedia.org/wiki/Java_Native_Interface

gcj可以将大多数Java源代码编译为本机代码(与libgcj共享库链接),而不是JVM字节码。

有许多类似的Python项目,例如shedskin ,但没有一个成熟或活跃的。

Cython是相似的,但不是完全一样的Cython将用类似Python的语言编写的模块编译为CPython的本机C扩展模块。 但是,如果将其与将Python嵌入C应用程序结合在一起,它将为您提供大部分所需的东西。 但是,您仍在运行Python解释器循环,以将所有这些C编译功能绑定在一起。

您也可以使用Java做同样的事情-将JVM嵌入到您的应用程序中,使用gcj编译要使用本机代码的任何部分,同时将其他部分编译为字节码,并使用JNI在它们之间进行通信。

当然,您可以使用Jython将Python代码嵌入到JVM中,然后将其嵌入到C程序中,并且因为您可以直接从Jython使用JNI,所以这三种语言中的任何一对都可以有效地相互交流,而无需经历第三。

我认为您在问题中建议使用将JVM或CPython解释器作为子进程生成的想法也很好。 但是,在这种情况下,您唯一需要的接口是子进程的stdin / stdout / stderr(或您手动创建的任何管道或套接字),其灵活性不如直接在对象上调用方法的灵活性,等等。(然后,有时,额外的间接访问可能是一件好事,这迫使您在组件之间定义一个完全分隔的API。)

您还可以研究Lua,虽然它没有像其他许多脚本语言一样广泛使用,但它可以轻松地嵌入到可执行文件中。 它相对较小且速度很快。 只是另一个选择。 如果要从c / c ++调用其他语言,请查看SWIG。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM