der Titel dieser Frage ist ein exact dupe, aber die Antworten in dieser Frage helfen mir nicht.Konvertieren Sie eine statische Bibliothek in eine gemeinsame Bibliothek (Erstellen libsome.so von libsome.a): wo ist meine Symbole?
Ich habe eine Reihe von Objektdateien in einer statischen Bibliothek verpackt:
% g++ -std=c++98 -fpic -g -O1 -c -o foo.o foo.cpp
% g++ -std=c++98 -fpic -g -O1 -c -o bar.o bar.cpp
% ar -rc libsome.a foo.o bar.o
I libsome.so von libsome.a anstelle der Objektdateien erzeugen möchten, aber die Bibliothek ist wirklich Barebones:
% g++ -std=c++98 -fpic -g -O1 -shared -o libsome.so libsome.a
% nm -DC libsome.so
0000xxxx A _DYNAMIC
0000xxxx A _GLOBAL_OFFSET_TABLE_
w _Jv_RegisterClasses
0000xxxx A __bss_start
w __cxa_finalize
0000xxxx A _edata
0000xxxx A _end
0000xxxx T _fini
0000xxxx T _init
die statische Bibliothek ist in Ordnung, oder zumindest ich bin durchaus in der Lage, es zu einer ausführbaren Datei zu verknüpfen und habe es die enthaltene Funktionalität auszuführen. auch, alles ist in Ordnung, wenn ich libsome.so von foo.o und bar.o erstellen.
+1 Da gehts los. Ich habe versucht "Mann ld" und habe das verpasst. –
danke, das ist es! Ich habe die Manpage von ld nach oben und unten durchsucht, aber irgendwie diese Option verpasst. –
Nun, wenn nur diese ausgezeichnete Antwort auch zeigen würde, wie man dies mit einem CMake-Projekt einrichtet! Vielen Dank –