Если вы хотите перехватывать Java-Python, вам будет намного лучше использовать Jython, а затем вызывать через границу таким образом.
Однако, да, можно вызвать внешнюю библиотеку из Java; но для этого вам не нужен GCJ. Скорее всего, вы можете просто вызвать экземпляр JVM внутри вашей среды исполнения Python, а затем вызвать для этого свой метод (ы).
JNI invocation spec
В принципе, вы хотите создать виртуальную машину при запуске, а затем вызвать свой метод (ы), когда вы хотите:
// 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 *, поэтому может быть нетривиально делать это напрямую.
Можете ли вы использовать Jython? Я совершенно уверен, что это будет намного проще. – zneak
Это было бы, но тогда это сделало бы использование множества библиотек на основе C, которые я могу вызывать из CPython намного сложнее, и оставляю меня с недостатком библиотек. –