verbunden werden kann. Mein System ist ein älteres NAS mit 2.6.32. Ich habe festgestellt, dass bei der Verwendung von -static für jede nachfolgende Bibliothek auch versucht wird, irgendeine andere Bibliothek, die ich brauche, statisch zu verknüpfen.Statische Verknüpfung einer Bibliothek bewirkt, dass die libc nicht mit
Wenn ich zuerst das Flag -Wl, -Bdynamic hinzufüge und dann diese Bibliotheken mit -lc explizit benenne, wie zum Beispiel "-Wl, -Bdynamic -lc -lstdC++", funktioniert es. Was passiert, ist, dass libc und andere nicht statisch verknüpft sind.
Die statische libc auf dem System /opt/lib/libc_nonshared.a.
genannt
Der Inhalt /opt/lib/libc.so dies:
OUTPUT_FORMAT(elf32-littlearm)
GROUP (/lib/libc.so.6 /opt/lib/libc_nonshared.a)
Die gcc Version 4.2.3 ist. Der aktuelle Build-Befehl, dem ich gegenüberstehe, fügt -dynamic
am Ende hinzu, aber das hilft nicht viel. Wenn ich eine statische Bibliothek direkt mit dem Namen .a hinzufüge und keine -l-Markierung verwende, gibt es kein Problem.
Das Problem scheint zu sein, dass die dynamische Bibliothek von libc kam mit dem NAS, aber die statische Version befindet sich in/opt/lib.
Ich betreibe:
gcc hamming.c -static -L. -L/opt/lib -l:matrix.a -o hamming
ich:
/opt/lib/gcc/arm-none-linux-gnueabi/4.2.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
make: *** [hamming] Error 1
wenn ich versuche, statische libc zu verwenden, wie ist. Würde ich einen 'Hack' ausführen, um libc_nonshared.a mit libc.a zu verknüpfen, findet er es plötzlich. Aber beschwert sich:
hamming.c:54: undefined reference to `malloc'
hamming.c:54: undefined reference to `memset'
Und eine Zillion andere Fehler natürlich. Wie bereits erwähnt, enthält /opt/libc.so den Verweis auf beide Dateien (dynamisch und statisch).
Für libstdC++ existiert nur eine .la-Datei.
Was könnte statische Verbindung von z.B. libc und libstd ++ um zu brechen? – Xennex81
@ Xennex81 Es hängt davon ab, was Sie mit "Pause" meinen. Man kann nur darüber spekulieren, warum ein bestimmter Verbindungsbefehl fehlschlägt, ohne den fehlgeschlagenen Verbindungsbefehl und alle daraus folgenden Fehler zu sehen. Wenn Sie diese Information wörtlich hinzufügen, erhalten Sie im Körper Ihrer Frage wahrscheinlich genau die richtige Antwort. –
Ich habe diese Informationen erhalten. – Xennex81