Hi,
Platform: Linux

I am trying to write a callback function. The function exists inside the 
executable.

If I try to compile without using the "-rdynamic" option:
make USE_LOCAL_HEADERS=0 LDFLAGS=-L. BASE_CFLAGS=-m32 CFLAGS='-fopenmp'

Compilation is successful. However, dlsym() returns "undefined symbol: 
UnLinkLinkroutingcache"
UnLinkLinkroutingcache: Is the function I am trying to callback to.


Furthermore,
If I try to compile using "-rdynamic" option:
make USE_LOCAL_HEADERS=0 LDFLAGS=-L. BASE_CFLAGS=-m32 CFLAGS='-fopenmp 
-rdynamic'

The compilation is successful. However, when I try to run the Game:
./ioq3ded.ppc64 +set fs_game Mod +set sv_pure 0 +set vm_game 0 +set vm_cgame 0 
+set vm_ui 0 +set dedicated 1 +exec something_117.cfg

----------------------
8146 files in pk3 files
Loading dll file qagame.
Sys_LoadDll(/r/home7/ioquake3/build/release-linux-ppc64/Mod/qagameppc.so)...
Sys_LoadDll(/r/home7/ioquake3/build/release-linux-ppc64/Mod/qagameppc.so): 
succeeded ...
Sys_LoadDll(qagame) found vmMain function at 0xc4394cf0
------- Game Initialization -------
gamename: baseq3
gamedate: Dec 28 2011
zsh: segmentation fault  ./ioq3ded.ppc64 +set fs_game Mod +set sv_pure 0 +set 
vm_game 0 +set vm_cgame

And, it exists. Are my options incorrect?

The code is as follows:
void callUnlinkLink(void)
{
    void* handle;
    void (*initializer)(void);
    FILE *fp;

    handle = dlopen(NULL, RTLD_LAZY);

    if(handle == NULL) {
        // report error ...
        fp = fopen("zg_ICantFindFile.txt", "a");
        if( fp != NULL )
        {
            fprintf(fp, "%d", 1 );
            fprintf(fp, "\n" );
            fprintf(fp, "%s", dlerror() );
        }
        fclose(fp);
        //exit(1);return;
    } else {
        initializer = dlsym(handle,"UnLinkLinkroutingcache");
        if(initializer == NULL) {
            // report error ...
            fp = fopen("zg_ICantFindFfunction.txt", "a");
            if( fp != NULL )
            {
                fprintf(fp, "%d", 1 );
                fprintf(fp, "\n" );
                fprintf(fp, "%s", dlerror() );
            }
            fclose(fp);
            exit(1);return;
        } else {
            // cast initializer to its proper type and use
            initializer();
        }
        // use the result in a call to dlsym
    }
}
_______________________________________________
ioquake3 mailing list
ioquake3@lists.ioquake.org
http://lists.ioquake.org/listinfo.cgi/ioquake3-ioquake.org
By sending this message I agree to love ioquake3 and libsdl.

Reply via email to