通过查看Eclipse项目如何创建启动器,我能够解决此问题。完成后,您需要为JVM生成一个单独的线程,但是main方法需要启动CFRunLoop。
您的特定实现可能还有一些其他细节,但是在我们的案例中,与此类似的东西目前正在起作用:
...#include <CoreServices/CoreServices.h>static void dummyCallback(void * info) {}......if (stack_size > 0) { pthread_attr_setstacksize(&thread_attr, stack_size);}CFRunLoopRef loopRef = CFRunLoopGetCurrent();pthread_create(&vmthread, &thread_attr, startJava, (void *)&thread_data_struct);pthread_attr_destroy(&thread_attr);CFRunLoopSourceContext sourceContext = { .version = 0, .info = NULL, .retain = NULL, .release = NULL, .copyDescription = NULL, .equal = NULL, .hash = NULL, .schedule = NULL, .cancel = NULL, .perform = &dummyCallback };CFRunLoopSourceRef sourceRef = CFRunLoopSourceCreate(NULL, 0, &sourceContext);CFRunLoopAddSource(loopRef, sourceRef, kCFRunLoopCommonModes); CFRunLoopRun();CFRelease(sourceRef);...您可以在此处浏览Eclipse实现:
http://git.eclipse.org/c/equinox/rt.equinox.framework.git



