2016-03-30 7 views
0

Ich habe einige boost abhängigen Code I als dynamische Bibliothek kompilieren wollen:entfernen Bibliothek Abhängigkeit

g++ -Wall -fPIC -o myclass.o -c myclass.cpp 
g++ -shared -Wl,-soname,myclass.so.1 -o lib/myclass.so.1 myclass.o -lc 

jedoch nach dem Kompilieren ich bemerken, dass es noch einen Schub Abhängigkeit ist (ich bin mit ldd Kontrolle)

ldd lib/myclass.so.1 
linux-vdso.so.1 (0x00007fff741fd000) 
libboost_system.so.1.60.0 => /usr/lib/libboost_system.so.1.60.0 (0x00007f7945649000) 
libboost_serialization.so.1.60.0 => /usr/lib/libboost_serialization.so.1.60.0 (0x00007f794540b000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f7945089000) 
libm.so.6 => /usr/lib/libm.so.6 (0x00007f7944d83000) 
libc.so.6 => /usr/lib/libc.so.6 (0x00007f79449e2000) 
/usr/lib64/ld-linux-x86-64.so.2 (0x00005590726ae000) 
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f79447cc000) 
librt.so.1 => /usr/lib/librt.so.1 (0x00007f79445c3000) 
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f79443a6000) 

Gibt es eine Möglichkeit, Boost dynamische Abhängigkeit von meiner gemeinsam genutzten Bibliothek zu entfernen (pack die aktuelle Boost-Version der Objekte, die ich in der .so) aufrufen?

+0

Haben Sie 'ldd -v' getestet, um zu überprüfen, ob die Bibliotheken Links zu Boost verlinken? – jotik

Antwort

0

alles, was Sie getan haben, ist richtig. Etwas, das in C++ passiert, ist leicht zu vergessen, also kompiliere etwas neu. Entfernen Sie alle .o-Dateien (und andere Dinge) und versuchen Sie es erneut

0

g++ -shared -Wl,-soname,myclass.so.1 -o lib/myclass.so.1 myclass.o -lc

jedoch nach dem Kompilieren ich bemerken, dass es noch einen Schub Abhängigkeit

Sie meinen, „nach der Linksetzung“ ist.

Es gibt keine Möglichkeit für den Link-Befehl, den Sie gaben, um eine Bibliothek zu erzeugen, die von Boost abhängt, es sei denn, Ihr g++ ist eigentlich ein Alias ​​für etwas anderes.

Wenn es ein Alias ​​ist, verwenden Sie es nicht. Wenn Sie eine gehackte g++ haben oder wenn Sie seine specs Datei geändert haben, tun Sie das nicht.

Wenn der Befehl, den Sie angegeben haben, nicht der tatsächliche Befehl ist, den Sie verwendet haben, zeigen Sie uns den aktuellen Befehl (und entfernen Sie den Boost).

+0

Ich benutzte diesen Befehl speziell durch ein Makefile und führte 'ldd' in der .so-Datei aus. Sowohl die Bibliothek selbst als auch die mit ihr verbundenen Binärdateien zeigen Boost-Abhängigkeiten an. – joaocandre