Funktion des Haupt-Programmes innerhalb eines Shared Objects aufrufen



  • Ich beschäftige mich im Moment mit Shared Objects als Module und versuche nun innerhalb einer Funktion des Moduls eine andere Funktion aufzurufen, die im Haupt-Programm implementiert ist.

    Das ganze sieht als Beispiel so aus:

    main.c:

    #include <stdio.h>
    #include <dlfcn.h>
    
    int function()
    {
    	return 42;
    }
    
    int main()
    {
    	void *handle = dlopen("./libdltest.so", RTLD_NOW | RTLD_GLOBAL);
    
    	if(!handle)
    	{
    		printf("%s\n", dlerror());
    		return -1;
    	}
    
    	return 0;
    }
    

    module.c

    #include <stdio.h>
    
    int function();
    
    void module_function()
    {
    	printf("The answer is %d.", function());
    }
    

    Beim Starten des Programms erhalte ich dann aber folgende Fehlermeldung:

    ./libdltest.so: undefined symbol: function
    

    Ich vermute mal, dass das daran liegt, dass ldd nicht weiß, wo es das Symbol für function() auflösen soll. Aber wie könnte ich das lösen? Müsste ich dafür die Funktionen, die das Modul vom Haupt-Programm braucht, in eine extra Library auslagern und das Modul dann gegen diese Library linken? Oder gibt es eine Möglichkeit, dem Modul beim Kompilieren mitzuteilen, dass es function() im Haupt-Programm findet?



  • Jo. Du musst das Hauptprogramm soweit es notwendig ist als Bibliothek auslagern und dagegen linken.

    Alternativ kannst du dem subprogramm einen Funktionspointer übergeben.


Anmelden zum Antworten