gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:41:17 25 4
gpt4 key购买 nike

一个看似不寻常的简短问题。 (相反)

而不是从解释性语言调用 native 代码;有没有办法将 Java 或 Python 代码编译为 .dll/.so 并从 C/C++ 调用代码?

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

谢谢。

最佳答案

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

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

Cython 类似,但不完全相同 — 它将用类 Python 语言编写的模块编译为 CPython 的 native C 扩展模块。但如果你把它和 embedding Python in a C app 放在一起,它就会给你大部分你想要的东西。但您仍在运行 Python 解释器循环来将所有这些编译为 C 的函数连接在一起。

您也可以使用 Java 执行相同的操作 - 将 JVM 嵌入到您的应用程序中,使用 gcj 将您想要的任何部分编译为 native 代码,同时将其他部分编译为字节码,并使用 JNI他们之间进行沟通。

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

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

关于java - Java/Python 的动态链接库可以在 C/C++ 中访问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21171607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com