lib.c enthält:Warum ändern sich die Namen der Funktionen nach dem Erstellen einer gemeinsam genutzten Bibliothek?
#include <stdio.h>
void testFunction()
{
printf("This is the testFunction from lib.so");
}
ich kompilierte Datei mit folgendem Befehl:
g++ -fPIC -shared lib.c -o lib.so
Nachdem ich nm runned lib.so fand ich, dass Testfunktion _Z12testFunctionv wurde. Warum? Ich denke, das ist ein großes Problem, wenn es darum geht, Funktionen mit dlsym zu laden.
Es "funktioniert" mit 'g ++', die eine andere Rolle hat: C++ - Code, nicht C-Code zu kompilieren. Es passiert einfach, dass Ihr C-Code auch gültiger C++ - Code ist. Wenn Sie 'new' anstelle von' testFunction' als Namen verwendet haben, ist Ihr Quellcode nicht gültig C++ (bleibt aber in C gültig), weil 'new' ein C++ - Schlüsselwort ist. –