2016-06-15 12 views
0

Ich möchte so viele Informationen wie möglich aus ldd verstecken, also lerne ich, wie man in Bibliotheken statisch verknüpft, anstatt sie dynamisch zu verknüpfen. Ich habe von einem anderen Stackoverflow Post gelesen, dass die korrekte Syntax istg ++ kann statische Version von gemeinsamen Objekten nicht verknüpfen

g++ -ldynamiclib -o exe files.cpp staticlib.a 

So meine aktuelle Zusammenstellung Code sieht wie folgt aus:

STATIC_LIB="" 
STATIC_LIB="$STATIC_LIB ${PATH}/libcrypto.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libdl-2.5.so" // I couldn't find the .a version for this, so I tried doing it this way, and have also tried doing just -ldl 
STATIC_LIB="$STATIC_LIB ${PATH}/libstdc++.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libgcc.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libc.a" 

g++ -g -I${INCLUDE_PATH} -o executable file1.cpp file2.cpp $STATIC_LIB 

Ich habe mit ldd bestätigt, dass es auf diese Weise für libcrypto arbeitet, wie es eine externe Bibliothek ist, die ich hereingebracht habe. Jedoch funktioniert das überhaupt nicht für alles andere, und ich kann immer noch sehen, dass sie aufgeführt werden, wenn ich ldd benutze. Kennt jemand den richtigen Weg, dies zu tun?

P.S. Ich habe auch einige andere Alternativen ausprobiert, wie zB -static oder -Wl, -Bstatic, und ich konnte keinen von beiden zum Laufen bringen. Nicht sicher, ob es meine Syntax ist oder ob es einfach nicht möglich ist.

+0

Ich bin etwas neugierig auf die Notwendigkeit, so viele Informationen wie möglich von LDD zu verstecken. Vielleicht XY Problem? http://meta.stackexchange.com/a/66378 – renemilk

+0

Es ist nur ein Schritt in der Analyse der ausführbaren Datei für zusätzliche Informationen darüber, wie das Programm zu brechen. Reverse Engineering. Angenommen, jemand versucht, das Programm zu unterbrechen oder Informationen zu erhalten, wollte ich so viel wie möglich verstecken. –

Antwort

1

Diese Bibliotheken libstdc++, libgcc und libc, dass etwas Besonderes sind sind sie sehr grundlegender Bedeutung für den Betrieb jeder mit gcc kompilierte Programm. Spezielle gcc Optionen existieren, wenn Sie sie statisch verknüpfen möchten, nämlich -static-libstdc++ und -static-libgcc.

Beachten Sie, dass Sie wirklich wissen sollten, was Sie tun, wenn Sie diese Optionen wählen. Es kann Portabilitätsprobleme für Ihr Programm verursachen, von denen viele sich auf nicht intuitive Weise ausdrücken.

+0

Ich habe diese beiden Optionen schon einmal ausprobiert, aber der Compiler, den ich verwende, ist ziemlich alt und hat nicht -static-libstdC++ '. Und als ich '-static-libgcc' hinzugefügt habe, konnte ich es immer noch sehen, wenn ich' ldd' ausführe. –