Je reçois une erreur de temps de liaison: Le code provoquant l'erreur (assemblage en C Source): p> # if defined(__ELF__)
# define __SECTION_FLAGS ", \"aw\" , @progbits"
/* writable flag needed for ld ".[cd]tors" sections bug workaround) */
# elif defined(__COFF__)
# define __SECTION_FLAGS ", \"dr\""
/* untested, may be writable flag needed */
# endif
asm
(
".section .ctors" __SECTION_FLAGS "\n"
".globl __ctors_begin__\n"
"__ctors_begin__:\n"
".previous\n"
);
4 Réponses :
Un long coup:
Peut-être que votre lieur s'attend à ce que le format ELF (au lieu de COFF), et pour une raison quelconque el elf __ code> n'est pas défini? Avez-vous vérifié la sortie de préprocesseur pour cette version particulière? P>
je voudrais vérifier la valeur de __ section_flags code> juste pour être sûr que cela contient en effet une hache ou un aw. Je serais également sûr que
__ coff __ code> n'est pas défini et que
__ elf __ code> est. À défaut, il pourrait être temps d'attraper (est possible) une version précédente ou future du compilateur / liant et de voir si cela corrige votre problème. Peut-être pourriez-vous compiler votre code comme C ++ et d'une manière ou d'une autre, laissez-la sur les scritchs compilateur / liker / liker faire ce qu'ils sont censés faire? Dunno complètement, mais c'est là que je commencerais. P>
Un coup très long, mais la section est définie comme si vous voulez dans le script de liaison? LD IIRC a une option verbeuse pour afficher le script de liaison. P>
Les sections fonctionnent bien. Je vais donc ignorer cet avertissement. P>
Quel compilateur C utilisez-vous?
En tant que note ajoutée, le code exact que vous avez publié compilait bien dans GCC 4.4.1 sur Ubuntu 64 bits
C'est une erreur de temps de liaison, pas une compilation d'heure. Voici la version Information: Linker: GNU LD (GNU Binutils pour Debian) 2.20.1-System.20100303; Compilateur: GCC (Debian 4.4.2-9) 4.4.3 20100108 (PRERRELASE).