@@ -283,7 +283,27 @@ jobject GetCurrentContext()
283283 return g_GlobalContext;
284284}
285285
286- void * AML_dlopen (const char * lib)
286+ struct LibraryLoadData
287+ {
288+ LibraryLoadData () : initMembersList(NULL ), initMembersCount(0 ) { }
289+ typedef void (*initArrayMember)();
290+
291+ initArrayMember* initMembersList;
292+ int initMembersCount;
293+ };
294+ static LibraryLoadData g_LoadDatas[2 ];
295+ void AML_PostLoadLib (int libNum)
296+ {
297+ libNum--;
298+
299+ const int size = g_LoadDatas[libNum].initMembersCount ;
300+ for (int i = 0 ; i < size; ++i)
301+ {
302+ g_LoadDatas[libNum].initMembersList [i]();
303+ }
304+ }
305+
306+ void * AML_dlopen (const char * lib, int libNum)
287307{
288308 return dlopen (lib, RTLD_NOW);
289309}
@@ -314,6 +334,17 @@ void StartAMLRightNow(const char* libName1 = NULL, const char* libName2 = NULL)
314334 return ;
315335 }
316336
337+ // Preload libs
338+ void *lib1 = NULL , *lib2 = NULL ;
339+ if (libName1 && libName1[0 ])
340+ {
341+ lib1 = AML_dlopen (libName1, 1 );
342+ }
343+ if (libName2 && libName2[0 ])
344+ {
345+ lib2 = AML_dlopen (libName2, 2 );
346+ }
347+
317348 /* Must Have for mods */
318349 modlist->AddMod (amlmodinfo, 0 , " localpath (core)" );
319350 interfaces->Register (" AMLInterface" , aml);
@@ -541,15 +572,15 @@ void StartAMLRightNow(const char* libName1 = NULL, const char* libName2 = NULL)
541572 // if(g_bCrashAML) __builtin_trap(); // Dont let really weird guys to use this...
542573
543574 // TODO: should be loaded in a different thread..?
544- if (libName1 && libName1[ 0 ] )
575+ if (lib1 )
545576 {
546- void * lib1 = AML_dlopen (libName1 );
577+ AML_PostLoadLib ( 1 );
547578 auto libEntry = (void (*)(JavaVM*, void *))dlsym (lib1, " JNI_OnLoad" );
548579 if (libEntry) libEntry (g_pJavaVM, g_pJavaReserved);
549580 }
550- if (libName2 && libName2[ 0 ] )
581+ if (lib2 )
551582 {
552- void * lib2 = AML_dlopen (libName2 );
583+ AML_PostLoadLib ( 2 );
553584 auto libEntry = (void (*)(JavaVM*, void *))dlsym (lib2, " JNI_OnLoad" );
554585 if (libEntry) libEntry (g_pJavaVM, g_pJavaReserved);
555586 }
0 commit comments