Comment faire un lien compilé fichier de l'objet (bonjour.o) avec ld sur Mac OS X?
J'ai eu un problème avec un lien objectif de fichiers sur un Mac OS X. remonter le problème est,
voici mon C programme "hello world"
#include <stdio.h>
int main(){
printf("Hello, world!\n");
return 0;
}
//Compiler avec gcc (clang compilateur LLVM sur mac)
$ gcc -c hello.c
Le fichier de sortie est bonjour.o
lien avec gcc et exécutez le fichier exécutable est
$ gcc hello.o -o hello
$ ./hello
Maintenant, je dois utiliser le mac programme de l'éditeur de liens ld ou Ld pour le lien l'objectif de fichiers au lieu de gcc. Dans ce cas, quels arguments dois-je passer dans la ld programme afin d'obtenir l'exécution du programme? Un simple passage dans l'objet de nom de fichier, c'est à dire
$ ld bonjour.o
résultant dans
ld: warning: -macosx_version_min not specified, assuming 10.6
Undefined symbols for architecture x86_64:
"_printf", referenced from:
_main in hello.o
"start", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for inferred architecture x86_64
Ainsi que d'autres fichiers que j'ai besoin d'inclure de lien ou de l'architecture de l'information que j'ai besoin de le préciser? Merci.
OriginalL'auteur SkyOasis | 2013-12-02
Vous devez vous connecter pour publier un commentaire.
Bon, j'avais cette question avant de trop. Oui, la raison pour laquelle l'éditeur de liens erreurs, c'est parce que vous avez besoin de nourrir toute la magie des arguments que gcc ne. Et le moyen facile de découvrir ces est d'invoquer la
-v
option surgcc
pour révéler toutes les commandes exécutées dans les étapes de compilation. Dans votre cas, exécutez:...dont la sortie, sur mon système, se termine par la ligne:
Je ne sais pas ce que le
collect2
programme, mais si vous nourrissez tous ces arguments pourld
il devrait fonctionner tout de même (au moins, il n'sur mon système).OriginalL'auteur
Pour une référence, linker options sont
ld
dit-dynamic
est la valeur par défaut. Aussi il n'a pas la-demangle
option. La liaison travaillé sans ces deux pour moi.J'ai trouvé que
-lSystem
est assez: vous n'avez pas besoin d'inclure explicitementlibclang_rt.osx.a
et-arch
et-macosx_version_min
sont donnés par défaut (avec un avertissement) si ce paramètre est omis.OriginalL'auteur SkyOasis