Posible usar GCJ para producir exigible biblioteca de Python?
Pregunta
¿Es posible compilar una biblioteca destinada a Java con GCJ, obtener una DLL y llamar desde ctypes pitón?
Me interesa toxilibs por ahora, pero si alguien conoce un ejemplo de juguete que sería grande!
Solución
Si desea ganchos Java Python, sería mucho mejor usar Jython y luego llamar a través del límite de esa manera.
Sin embargo, sí, es posible llamar a una biblioteca externa de Java; pero no es necesario GCJ para hacer eso. Por el contrario, sólo puede abrir una instancia JVM dentro de su tiempo de ejecución Python y luego llamar a su método (s) para eso.
Básicamente, desea crear la máquina virtual en el inicio, a continuación, invoque el método (s) siempre que lo desee:
// 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);
Se puede escribir algún código simple C-envoltura para invocar este para vosotros desde ctypes. Sin embargo, el JavaVM es una estructura de una estructura con un número de punteros void *, por lo que podría ne no trivial hacerlo directamente.