gcc-Blackfin reliant l'ensemble des outils mathématiques fonction d'erreur comme atan2: undefined reference to ... dans les watan2.o

StackOverflow https://stackoverflow.com/questions/8305081

Question

J'ai un problème avec la fonction mathématique classique qui relie de mon programme de métal nu avec éditeur de liens de la chaîne d'outil Blackfin. J'ai essayé beaucoup de choses, mais je ne vois pas pourquoi fournir les libm.a does't les définitions de la fonction qu'il utilise. Ai-je besoin d'ajouter une bibliothèque supplémentaire? si oui, lequel?

Je l'ai mis mon éditeur de liens verbeux lign avec les bibliothèques liées et l'exemple erreur liant je suis arrivé.

Merci,

William

bfin-elf-ld -v  -o test_ad1836_driver -T  coreb_test_ad1836_driver.lds  --just-symbol  ../../icc_core/icc queue.o ezkit_561.o  heap_2.o  port.o tasks.o test_ad1836_driver.o list.o croutine.o user_isr.o bfin_isr.o app_c.o context_sl_asm.o cycle_count.o CFFT_Rad4_NS_NBRev.o fir_decima.o fir_decima_spl.o math_tools.o -Ttext 0x3c00000   -L /opt/uClinux/bfin-elf/bfin-elf/lib -lbffastfp -lbfdsp -lg -lc -lm -Map=test_ad1836_driver.map 
argv[0]      = 'bfin-elf-ld'
bindir       = '/opt/uClinux/bfin-elf/bin/'
tooldir      = '/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/'
linker       = '/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/ld.real'
elf2flt      = '/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/elf2flt'
nm           = '/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/nm'
objdump      = '/opt/uClinux/bfin-elf/bin/bfin-elf-objdump'
objcopy      = '/opt/uClinux/bfin-elf/bin/bfin-elf-objcopy'
ldscriptpath = '/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/../lib'
Invoking: '/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/ld.real' '-v' '-o' 'test_ad1836_driver' '-T' 'coreb_test_ad1836_driver.lds' '--just-symbol' '../../icc_core/icc' 'queue.o' 'ezkit_561.o' 'heap_2.o' 'port.o' 'tasks.o' 'test_ad1836_driver.o' 'list.o' 'croutine.o' 'user_isr.o' 'bfin_isr.o' 'app_c.o' 'context_sl_asm.o' 'cycle_count.o' 'CFFT_Rad4_NS_NBRev.o' 'fir_decima.o' 'fir_decima_spl.o' 'math_tools.o' '-Ttext' '0x3c00000' '-L' '/opt/uClinux/bfin-elf/bfin-elf/lib' '-lbffastfp' '-lbfdsp' '-lg' '-lc' '-lm' '-Map=test_ad1836_driver.map'
GNU ld version 2.17
/opt/uClinux/bfin-elf/bfin-elf/lib/libm.a(w_atan2.o): In function `atan2':
/usr/src/packages/BUILD/blackfin-toolchain-2010R1/gcc-4.3/newlib/libm/math/w_atan2.c:96: undefined reference to `__eqdf2'
/usr/src/packages/BUILD/blackfin-toolchain-2010R1/gcc-4.3/newlib/libm/math/w_atan2.c:96: relocation truncated to fit: R_BFIN_PCREL24 against undefined symbol `__eqdf2'
.....
/opt/uClinux/bfin-elf/bfin-elf/lib/libm.a(e_sqrt.o): In function `_ieee754_sqrt':
/usr/src/packages/BUILD/blackfin-toolchain-2010R1/gcc-4.3/newlib/libm/math/e_sqrt.c:110: undefined reference to `__muldf3'
/usr/src/packages/BUILD/blackfin-toolchain-2010R1/gcc-4.3/newlib/libm/math/e_sqrt.c:110: undefined reference to `__adddf3'

.....
/opt/uClinux/bfin-elf/bfin-elf/lib/libm.a(s_atan.o): In function `atan':
/usr/src/packages/BUILD/blackfin-toolchain-2010R1/gcc-4.3/newlib/libm/math/s_atan.c:169: undefined reference to `__muldf3'
/usr/src/packages/BUILD/blackfin-toolchain-2010R1/gcc-4.3/newlib/libm/math/s_atan.c:170: undefined reference to `__muldf3'
/usr/src/packages/BUILD/blackfin-toolchain-2010R1/gcc-4.3/newlib/libm/math/s_atan.c:172: undefined reference to `__muldf3'
Était-ce utile?

La solution

Ajouter -lgcc. Vous avez besoin des fonctions de comparer, ajouter et multiplier les valeurs de type C de double, respectivement, __eqdf2, __adddf3 et __muldf3.

En général, je vous recommande d'utiliser le pilote du compilateur (gcc) au lieu de lier directement avec ld, même pour les sorties de type firmware / kernel, parce que le premier prendra en charge les fichiers de démarrage nécessaires et les bibliothèques d'exécution du compilateur.

Autres conseils

Salut, je pense que je connais le problème, Blackfin est pas vraiment compatible avec les mathématiques de lib. Il est la raison pour laquelle dans la version VDSP les fonctions mathématiques sont re mises en œuvre. Pour résoudre mon problème, je l'ai fait convertir les mathématiques VDSP lib gcc et il compile bien maintenant.

Merci

En fait, je trouve une meilleure réponse,

Blackfin ne fait en faveur des mathématiques std. Je viens d'avoir une bibliothèque drapeau dans le mauvais ordre.

Pour l'éditeur de liens, utilisez l'ordre de drapeau lib suivant et il devrait fonctionner:

/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/ld.real' '-v' '-o' .... '-L' '/opt/uClinux/bfin-elf/lib/gcc/bfin-elf/4.3.5/' '-lgcc' '-L' '/opt/uClinux/bfin-elf/bfin-elf/lib' '-lbfdsp' '-lg' '-lm' '-lbffastfp' '-lc' 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top