Francis:

Look in build/windows/makefiles/vm.make:

LINK_FLAGS=$(LINK_FLAGS) $(STACK_SIZE) /subsystem:windows /dll /base:0x8000000 \
  /export:JNI_GetDefaultJavaVMInitArgs /export:JNI_CreateJavaVM    \
  /export:JNI_GetCreatedJavaVMs /export:jio_snprintf               \
  /export:jio_printf /export:jio_fprintf                           \
  /export:jio_vfprintf /export:jio_vsnprintf $(AGCT_EXPORT)        \
  /export:JVM_GetVersionInfo \
  /export:JVM_GetThreadStateNames /export:JVM_GetThreadStateValues \
  /export:JVM_InitAgentProperties

Are those export directives specified somewhere in your build?


Also, I am not sure of the details of your effort, but the hotspot build already has some support for creating a VS2003 project and building that way. See build/windows/create.bat. However, this facility isn't used much and it's probably bit rotted somewhat, so it may be broken. But maybe it could help you in what you're trying to do.

Steve

Francis ANDRE wrote:
Hi All


For those interested in, I am building an msvc_2003 solution for the Hotspot JVM (compiler2 for now, compiler1 and kernel after) with the includes from the windows-i586-debug directory and using at link time the vm.def generated by the make debug_build.

At run time, the java.exe fails to execute because the bin/server/jvm.dll does not export the JNI_CreateJava & JNI_GetDefaultJavaVMInitArgs symbols as expected by jdk/src/windows/bin/java_md.c:

jboolean
LoadJavaVM(const char *jvmpath, InvocationFunctions *ifn)
    ...
    ifn->CreateJavaVM =
        (void *)GetProcAddress(handle, "JNI_CreateJavaVM");
    ifn->GetDefaultJavaVMInitArgs =
        (void *)GetProcAddress(handle, "JNI_GetDefaultJavaVMInitArgs");
    if (ifn->CreateJavaVM == 0 || ifn->GetDefaultJavaVMInitArgs == 0) {
        ReportErrorMessage(JNI_ERROR1, (char *)jvmpath);
        return JNI_FALSE;
    }

As the matter of fact, this is correct because the exported symbols are those:
    2372  943 0001F47E [EMAIL PROTECTED]
    2373  944 0002D05B [EMAIL PROTECTED]
    2374  945 00012382 [EMAIL PROTECTED]

while they should be like the one extracted from the build from make:
       1259  4EA 001B0810 JNI_CreateJavaVM
       1260  4EB 001B0930 JNI_GetCreatedJavaVMs
       1261  4EC 001B0770 JNI_GetDefaultJavaVMInitArgs


but I did not find how to export those undecorated symbols instead. How the build is producing those symbols??

TIA

FA

PS: BTW, why the solaris and linux get a os/java_md.c and not windows??

Reply via email to