Ableiten von Klasse in shared library
-
mit -rdynamic linken
-
Und im Code reichen dann Deklarationen der Funktionen aus?
-
ja
-
g++: error: unrecognized command line option '-rdynamic'
-
-Wl,-rdynamic
-
Bekomme dennoch die Linkerfehler.
"typeinfo for foo", referenced from:
g++ -dynamiclib -o "libtestdll" ./main.o
typeinfo for baz in main.o
"vtable for foo", referenced from:
foo::foo() in main.o
"foo::~foo()", referenced from:
baz::~baz() in main.o
ld: symbol(s) not found
-
nimm am besten cmake... das macht rdynamic automatisch dazu. wenns dann immer noch nicht geht stimmt doch was mit dem code nicht
-
Ich benutze make, weil meine IDE automatisch makefiles für mich erstellt. Kompilieren und Linken ist hier getrennt. Meine Flags sehen so aus:
g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -Wl,-rdynamic -fPIC -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
g++ -dynamiclib -o "libtestdll" ./main.o
-
das flag muss beim linken angegeben werden. Beim Programm und/oder bei der Library.
-
Dann kriege ich wieder die "unknown option"-Fehlermeldung. Kann es sein, dass der MacPorts GCC 4.7 unter Mac OS X dafür ein anderes Flag hat?
-
haste jetzt wieder das -Wl weggelassen?
ich kenne mac os nicht.
-
Nein, habe ich nicht.
-
Wieso übergibst du nicht einfach an die Shared Lib Pointer der Funktionen im Hauptprogramm, die du innerhalb der Shared Lib verwenden willst?