2016-08-01 24 views

Antwort

2

Sie haben ein C-Programm mit dem C++ - Compiler g++ kompiliert (und Ihr kleiner C-Code ist zufällig gültiger C++ - Code). Sie beobachten also einige name mangling. Sie sollten verwenden gcc statt (es ist Teil der gleichen Compiler Suite ist GCC ....):

gcc -Wall -g -O -fPIC -shared lib.c -o lib.so 

(I mit -Wall Kompilieren wird dringend empfohlen, alle Warnungen zu erhalten, und mit -g Debug-Informationen zu erhalten, die optimieren Flagge -O ist optional -es -O2 könnte mehr- zu optimieren und kann die Leistung des erzeugten Plugin verbessern)

Wenn Sie C++ verwenden möchten mit dlopen & dlsym unbedingt dielesen.

Vergessen Sie nicht, Dokumentation über Invoking GCC

+0

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. –

1

Sie „C++ Namen Mangeln“ erforschen müssen, um zu lesen.

Argumenttypen und mehr werden im endgültigen Namen codiert, den der Compiler generiert.

Wenn Sie dies nicht möchten (wenn Sie beispielsweise möchten, dass die Funktion von einem C Kontext aufgerufen werden kann), sollten Sie es extern "C" machen.