undefined reference to sync_fetch_and_add_4
Chaque fois que j'essaie d'utiliser __synchronisation_fetch_et_ajouter avec -m32 sur un ordinateur 64 bits, j'obtiens l'erreur suivante, alors qu'il compile bien avec la normale 64 bits. Je suis en utilisant le compilateur gcc 4.1.2. Quel peut être le problème ici, et quelle est la solution?
replication.cpp:(.text+0xb3b): undefined reference to `__sync_fetch_and_add_4'
replication.cpp:(.text+0xb82): undefined reference to `__sync_fetch_and_add_4'
replication.cpp:(.text+0xcc2): undefined reference to `__sync_fetch_and_add_4'
/tmp/cc7u9FLV.o: In function `potential_barrier_leader(unsigned int, pthread_barrier_t*)':
replication.cpp:(.text+0xd3f): undefined reference to `__sync_fetch_and_add_4'
replication.cpp:(.text+0xd54): undefined reference to `__sync_fetch_and_add_4'
/tmp/cc7u9FLV.o:replication.cpp:(.text+0xdb0): more undefined references to `__sync_fetch_and_add_4' follow
collect2: ld returned 1 exit status
make: *** [all] Error 1
OriginalL'auteur MetallicPriest | 2011-11-03
Vous devez vous connecter pour publier un commentaire.
À l'aide de -mars=i486 drapeau a fait le tour pour moi.
OriginalL'auteur MetallicPriest
Essayez d utiliser une version récente de GCC compilateur (par exemple GCC 4.6). J'ai essayé de compiler avec
gcc -S -O3 -m32 -fverbose-asm sync-3.c
le fichier de testgcc/testsuite/gcc.c-torture/compile/sync-3.c
et il fonctionne. Mongcc
(sur Debian/Sid/AMD64) est le système compilateur gcc 4.6.2.Vous n'avez pas besoin d'être root pour construire et installer un nouveau compilateur. Vous pouvez
../gcc-4.6.2/configure
avec--prefix=$HOME/pub --program-suffix=-my4.6.2
, etc. Après l'installation, il thrugcc-my4.6.2
en supposant$HOME/pub/bin
est dans votre$PATH
.OriginalL'auteur Basile Starynkevitch
hahah! il y a 5+ "standard atomique libs" (+prise en charge du noyau) qui est à peine atome
ic si vous me demandez. mais l'ignorer, est de tous les temps de distraction.
si votre bâtiment, c'est à dire de la glibc et d'obtenir cette erreur (je l'ai fait)
glibc-2.11.x s'attend gcc-4.4.x de le définir en interne, et vous avez gcc sans bu
ilt-atomique, il est probable que vous ne spécifiez arc gcc accepte (en raison de lacky dire
ctions). ont été glibc aime 786, gcc veut 386 et chiffres 786 peut-être. utiliser "originaires d'
e" devrait le faire. opt(mars) et de l'opt(mtune) ne SONT pas en OPTION de gcc s'appuie mauvais w/
o (probable)
vous ne trouverez pas un en-tête ou libtruc qui le définit (par exemple)
pour linux-gnu, vous pouvez utiliser (un simple pour moi de construire)
IMPORTANT: si vous construisez gcc w/o mtune mars, gcc a l'habitude de définir sync_fetch_and_add
(p.s. la glibc sync_fetch_and_add_4 est juste macro pour sync_fetch_and_add qui, aga
dans, glibc attend est défini)
aussi, si vous remplacez gcc-3.foo avec gcc-4.4.foo et compilation vous pourriez avoir besoin:
j'ai récemment besoin de ce (newgnu) pour la construction de binutils-ver/: -Wstrict-aliasing=0
merci guy en hollande pour l'affichage des mst qui pourrait être un problème pour gcc usines de valorisation !
n'est pas grâce aux comités qui changent continuellement et aussi de créer des "normes" que faire dépend de problèmes dans gcc 🙁 à utiliser .h ou .c de façon appropriée pour les foo "builtin" pour ajouter des fonctionnalités que vous voulez dans votre code comme tout le monde !!
amusez-vous 🙂
OriginalL'auteur toey knuwho