gcc: benötigte Bibliotheken nach dem object file

Eine Überraschung erlebte ich beim Bauen einfacher Demonstrationsprogramme unter Ubuntu 12.04. Folgende Anweisung:

gcc -lpthread -o pthread_demo pthread_demo.c

erzeugte beim Linkvorgang mehrere unresolved symbols bzgl. pthread Methoden. Tatsächlich wurde aber mit gleicher Anweisung das Programm zu den Anfangszeiten von Ubuntu 12.04 gebaut. Eine Umstellung des Linker Programms ld bzw. der Aufruf desjeniegen durch gcc dürfte daran schuld sein. In ld Version 2.20 führt der Linker-Flag

--as-needed

dazu, dass Bibliotheken nur noch gelinkt werden wenn diese undefined Symbols im Objekt File oder einer zuvor gelinkten Bibliothek auflösen kann. Daher muß von nun an das Objekt File vor den benötigten Bibliotheken im gcc Aufruf stehen.

gcc -o pthread_demo pthread_demo.c -lpthread

Alternativ könnte man das alte Verhalten mit folgendem Linker-Flag wiederherstellen

gcc -Wl,--no-as-needed -lpthread -o pthread_demo pthread_demo.c

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.