可以使用 GCJ 生成可从 Python 调用的库吗?

发布于 2024-08-20 06:52:34 字数 107 浏览 7 评论 0原文

是否可以使用 GCJ 编译一个用于 Java 的库,获取 dll 并从 python ctypes 调用?

我现在对 toxilibs 感兴趣,但如果有人知道一个玩具示例,那就太好了!

Is it possible to compile a library intended for Java with GCJ, get a dll and call from python ctypes?

I'm interested in toxilibs for now, but if anybody knows a toy example that would be great !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沧桑㈠ 2024-08-27 06:52:34

如果您想要 Java-Python 挂钩,那么最好使用 Jython,然后以这种方式跨边界调用。

但是,是的,可以从 Java 调用外部库;但你不需要 GCJ 来做到这一点。相反,您可以在 Python 运行时中启动一个 JVM 实例,然后为此调用您的方法。

基本上

,你想要在启动时创建 VM,然后在需要时调用您的方法:

// Do this once per session, e.g. an __init__ 

JNI_CreateJavaVM(&jvm, &env, &vm_args); 

// When needed invoke Example.foo(int)
jclass cls =
env->FindClass("Example");  jmethodID
mid = env->GetStaticMethodID(cls,
"foo", "(I)V"); 
env->CallStaticVoidMethod(cls, mid,100);

您可以编写一些简单的 C 包装器代码来从 ctypes 中调用它。然而,JavaVM 是一个具有许多 void* 指针的结构的结构,因此直接执行它可能并不简单。

If you want Java-Python hooks, you'd be far better off using Jython and then calling across the boundary that way.

However, yes, it's possible to call an external library from Java; but you don't need GCJ to do that. Rather, you can just bring up a JVM instance inside your Python runtime and then invoke your method(s) for that.

JNI invocation spec

Basically, you want to create your VM at startup, then invoke your method(s) whenever you want:

// Do this once per session, e.g. an __init__ 

JNI_CreateJavaVM(&jvm, &env, &vm_args); 

// When needed invoke Example.foo(int)
jclass cls =
env->FindClass("Example");  jmethodID
mid = env->GetStaticMethodID(cls,
"foo", "(I)V"); 
env->CallStaticVoidMethod(cls, mid,100);

You could write some simple C-wrapper code to invoke this for you from ctypes. However, the JavaVM is a structure of a structure with a number of void* pointers, so might ne non-trivial to do it directly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文