2012-11-02 10 views
13

Ich muss glibc statisch mit meinem Projekt verknüpfen, da die Zielplattform nur eine sehr alte unterstützt (aber es funktioniert mit statisch verknüpften Glibc aus meiner Toolchain, ich habe es überprüft)Link glibc statisch, aber einige andere Bibliotheken dynamisch mit GCC

Leider muss diese Anwendung pthread Bibliothek verwenden, aber statisch verknüpfte libpthread benötigt zu viel Speicherplatz.

Ich möchte glibc und dynamisch pthread statisch verknüpfen.

Nachdem dieser Befehl ausgeführt wird

powerpc-unknown-linux-gnu-gcc object_files -lrt -lpthread -Wl,-Bstatic -lc 

ich:

/powerpc-unknown-linux-gnu/bin/ld: cannot find -lgcc_s 
+0

Sie werden '-Wl, -Bdynamic' nach dem' -lc' hinzufügen müssen. –

+0

Oh, tut mir leid, es war mein Fehler. Ich wollte Glibc statisch verbinden – nkdm

+0

Related: http://StackOverflow.com/Questions/809794/use-both-static-and-dynamicallylinked-Libraries-in-GCC –

Antwort

12

Es gibt eine -static-libgcc wenn das helfen kann

+0

Danke, es funktioniert, aber das Programm ist immer noch zu groß damit. – nkdm

+1

@nkdm dann müssen Sie gehen mit R .. 's Vorschlag von uclibc – Anycorn

+10

Für den Datensatz libgcc ist nicht glibc (was ist der Titel dieser SO Frage ist). glibc ist die GNU-Implementierung der C-Standardbibliothek. libgcc ist Teil der gcc-Interna und wird von gcc "immer dann verwendet, wenn eine Operation ausgeführt werden muss, die zu kompliziert ist, um Inline-Code für zu erzeugen". –

8

Sie -static verwenden sollten, nicht -Wl,-static. Letzteres umgeht das Wissen von gcc, und daher versucht gcc immer noch, die gemeinsame libgcc_s.so anstatt die statische libgcc_eh.a zu verknüpfen.

Wenn Sie libc statisch, aber libpthread dynamisch verknüpfen möchten, wird dies einfach nicht funktionieren. Sie können verschiedene Versionen von libpthread nicht mischen und abgleichen. es ist Teil von glibc, nur eine separate Datei, und die Interna müssen übereinstimmen. Selbst wenn ich die selbe Version benutze, würde ich denken, libc statisch und libpthread dynamisch zu verlinken.

Wenn glibc zu groß für Ihre Bedürfnisse ist, können Sie eine alternative libc wie uClibc oder musl versuchen.

+0

Aber ich muss Lpthread dynamisch verknüpft haben. Die Option -static verbindet alles statisch. – nkdm