Math blackfin gcc工具链链接错误数学函数,如atan2:未定义的对。。。在watan2.o内
我的裸机程序与blackfin工具链链接器的经典数学函数链接有问题。我尝试了很多方法,但是我不明白为什么libm.a没有提供它所使用的函数的定义。我需要添加一个额外的库吗?如果是,哪一个 我已经将我的链接器verbose lign与链接库以及我得到的示例链接错误放在一起 谢谢 威廉Math blackfin gcc工具链链接错误数学函数,如atan2:未定义的对。。。在watan2.o内,math,gcc,linker,undefined,atan2,Math,Gcc,Linker,Undefined,Atan2,我的裸机程序与blackfin工具链链接器的经典数学函数链接有问题。我尝试了很多方法,但是我不明白为什么libm.a没有提供它所使用的函数的定义。我需要添加一个额外的库吗?如果是,哪一个 我已经将我的链接器verbose lign与链接库以及我得到的示例链接错误放在一起 谢谢 威廉 bfin-elf-ld -v -o test_ad1836_driver -T coreb_test_ad1836_driver.lds --just-symbol ../../icc_core/icc qu
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'
添加
-lgcc
。您需要这些函数来比较、添加和相乘Cdouble
类型值,分别是\uuuuqdf2
、\uuuuuuuu adddf3
和\uuuuuuu muldf3
通常,我建议使用编译器驱动程序(gcc),而不是直接链接到
ld
,即使是固件/内核类型的输出,因为前者将处理必要的启动文件和编译器运行库 嗨,我想我知道这个问题,blackfin与数学标准库不太兼容。这就是在VDSP版本中重新实现数学函数的原因。为了解决我的问题,我确实将VDSP数学库转换为gcc,现在它可以正常编译了
谢谢事实上我找到了一个更好的答案 blackfin实际上支持std数学。我只是把一些图书馆的旗帜弄错了顺序 对于链接器,使用以下lib标志顺序,它应该可以工作:
/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'
您好,谢谢您的回答,我通常也使用GCC进行链接。不幸的是,由于特定的内存映射,我无法使用此应用程序进行链接。我以前尝试过几次,只是让GCC编译和链接,但都没有成功。您知道如何直接在链接器中添加“分别比较、添加和相乘C双类型值的函数,_eqdf2、_adddf3和_muldf3”吗?bfin elf ld链接器不接受-仅lgcc-lg@williampagnon,你所说的“不接受lgcc”是什么意思?也许它找不到它?它应该在
$gccdir/lib/gcc/$target/$version
中。谢谢,我再试了一次,现在它可以工作了,不知道为什么,但我找到了修复方法:我有:GNU ld version 2.17/opt/uClinux/bfin elf/bin/。/bfin elf/bin/ld.real:找不到-lgcc。在elf/lib/gcc/bfin-elf/4.3.5/library文件夹中添加-L/opt/uClinux/bfin可以解决-lgcc的问题