Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math blackfin gcc工具链链接错误数学函数,如atan2:未定义的对。。。在watan2.o内_Math_Gcc_Linker_Undefined_Atan2 - Fatal编程技术网

Math blackfin gcc工具链链接错误数学函数,如atan2:未定义的对。。。在watan2.o内

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

我的裸机程序与blackfin工具链链接器的经典数学函数链接有问题。我尝试了很多方法,但是我不明白为什么libm.a没有提供它所使用的函数的定义。我需要添加一个额外的库吗?如果是,哪一个

我已经将我的链接器verbose lign与链接库以及我得到的示例链接错误放在一起

谢谢

威廉

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
。您需要这些函数来比较、添加和相乘C
double
类型值,分别是
\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的问题