Wenn Sie CC (1) verwenden, um ein Programm zu verknüpfen, wird ein Standard -Linker -Befehl aufgenommen. Zum Beispiel wurde Ihre Version des Compilers möglicherweise für die Verwendung /usr/bin/ld auf einer unix-ähnlichen Plattform erstellt. /usr/bin/ld )? Ich interessiere mich hauptsächlich für GCC und Clang.
Code: Select all
env LD=/usr/local/bin/ld cc foo.c -o foo
< /code>
Aber das funktioniert nicht für GCC oder Clang. Es würde natürlich funktionieren, wenn Sie eine Makefile hätten, die zuerst eine Objektdatei erstellt und dann $ {ld} zum Verknüpfen aufgerufen wurde (z. B. env ld =/usr/local/bin/ld make
). Zum Beispiel wäre es schön, dies zu tun: < /p>
Code: Select all
cc --linker=/usr/local/bin/ld foo.c -o foo
Stattdessen müssen Sie die Objektdatei generieren, CC -v ausführen, um die Argumente auf LD herauszufinden, und die gewünschten Ld mit diesen Argumenten ausführen:
">"> ">">
Code: Select all
cc -c foo.c
cc -v foo.c -o /dev/null
Schauen Sie sich nun den Linker -Aufruf an und kopieren Sie manuell das Austausch von Linker und temporärer Objektdatei. So etwas wie dieses (Beispiel aus einem Test auf Fedora 23), bei dem Sie /usr/libexec/gcc/x86_64-redhat-linux/5.3.1/Collect2 mit/usr/local/bin/ld ersetzen (obwohl es nicht genau gleich das gleiche wie scolle2 :