取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
Highlighted
Adventurer
Adventurer
743 次查看
注册日期: ‎12-06-2019

link失败,找不到库函数'sqrtf',<math.h>的头文件已经包含

工程背景:zynq7z020,freeRTOS

问题:link失败,找不到库函数'sqrtf',<math.h>的头文件已经包含;为什么找不到?

d:/xilinx/vitis/2019.2/gnu/aarch32/nt/gcc-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/8.2.0/../../../../arm-none-eabi/bin/ld.exe: ./src/PQA_Core1.o: in function `DealHalfCycIntForVte_SINT1_Handler': E:\7.PQA\2.CustomerSulotion\10.SP_Efunity\2.SRC\2.SW\20200521\2.SDK\pqa\Debug/../src/PQA_Core1.c:344: undefined reference to `sqrtf'

0 项奖励
16 回复数
Highlighted
Xilinx Employee
Xilinx Employee
718 次查看
注册日期: ‎09-14-2018

hi @ywxiao 

我理解是找不到包含“sqrtf” 实现的.a 文件,因为是link阶段报错而不是compile阶段。

尝试在link选项里面加 -lm看看?

----------------------------------------------------------------------------------------------
如果帖子有帮助,别忘“接受为解决方案”或“奖励”。谢谢!
Don't forget to "Accept as solution" or "Kudo" if it helps. Thanks!
----------------------------------------------------------------------------------------------

 

0 项奖励
Highlighted
Adventurer
Adventurer
712 次查看
注册日期: ‎12-06-2019

现在还发现:用别的xsa文件建的平台,不会出现这个问题;所以请问:像math这样的标准库,还跟vivado生产的xsa文件有关吗?
0 项奖励
Highlighted
Adventurer
Adventurer
647 次查看
注册日期: ‎12-06-2019

加-lm,还是一样的,link失败

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
644 次查看
注册日期: ‎09-14-2018

@ywxiao 

”现在还发现:用别的xsa文件建的平台,不会出现这个问题;所以请问:像math这样的标准库,还跟vivado生产的xsa文件有关吗?“

---我理解没有关系,这应该是纯软件侧的。你可以试下比较下两个工程makefile中的完整编译选项,看看是否有区别?

 

0 项奖励
Highlighted
Adventurer
Adventurer
636 次查看
注册日期: ‎12-06-2019

没有发现编译选项有什么区别,如下:
CASE1:link失败的console信息:
make all
make --no-print-directory pre-build
a9-linaro-pre-build-step
' '
make --no-print-directory main-build
'Building target: math_test.elf'
'Invoking: ARM v7 gcc linker'
arm-none-eabi-gcc -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -Wl,-build-id=none -specs=Xilinx.spec -Wl,-T -Wl,../src/lscript.ld -LE:/****/freeRTOS/export/freeRTOS/sw/freeRTOS/freertos10_xilinx_domain/bsplib/lib -o "math_test.elf" ./src/freertos_hello_world.o -Wl,--start-group,-lxil,-lfreertos,-lgcc,-lc,--end-group
d:/xilinx/vitis/2019.2/gnu/aarch32/nt/gcc-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/8.2.0/../../../../arm-none-eabi/bin/ld.exe: ./src/freertos_hello_world.o: in function `main':
E:\****\math_test\Debug/../src/freertos_hello_world.c:64: undefined reference to `sqrt'
collect2.exe: error: ld returned 1 exit status

CASE2:使用另外一个xsa创建的工程,link可以通过,同样用到sqrt,以下为console信息:
make all
make --no-print-directory pre-build
a9-linaro-pre-build-step
' '
make --no-print-directory main-build

'Building target: math_test.elf'
'Invoking: ARM v7 gcc linker'
arm-none-eabi-gcc -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -Wl,-build-id=none -specs=Xilinx.spec -Wl,-T -Wl,../src/lscript.ld -LE:/***/freeRTOS/export/freeRTOS/sw/freeRTOS/freertos10_xilinx_domain/bsplib/lib -o "math_test.elf" ./src/freertos_hello_world.o -Wl,--start-group,-lxil,-lfreertos,-lgcc,-lc,--end-group
'Finished building target: math_test.elf'
0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
588 次查看
注册日期: ‎09-14-2018

@ywxiao 方便的话,你也可以把你出问题的xsa文件添加到附件,我测试下看看

----------------------------------------------------------------------------------------------
如果帖子有帮助,别忘“接受为解决方案”或“奖励”。谢谢!
Don't forget to "Accept as solution" or "Kudo" if it helps. Thanks!
----------------------------------------------------------------------------------------------

0 项奖励
Highlighted
Adventurer
Adventurer
490 次查看
注册日期: ‎12-06-2019

 

奇怪的现象是:如果对变量进行sprt,link失败,常量没问题;如下图:

image.png

0 项奖励
Adventurer
Adventurer
485 次查看
注册日期: ‎12-06-2019

奇怪的现象是:如果对变量进行sprt,link失败,常量没问题;如下图:

请帮忙分析一下,我的vitis版本为2019.2

 

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
477 次查看
注册日期: ‎09-14-2018

@ywxiao 

我理解常量的运算可能被编译器优化掉了,也就是编译器直接用运算的结果来代替了。

有几个方法可以确认下,

1. 看下编译后的汇编,

2. 改优化等级成-O0测试下。

 

供参考。

BR/Chaoz

Highlighted
Adventurer
Adventurer
467 次查看
注册日期: ‎12-06-2019

你的理解是对的;还是因为没找到math库,需要手动添加math库;

现在还有2个问题:

1. math对应“m”,其他库对应关系是什么呢?

image.png

2. 在vitis里,为什么bool和true这种关键字没有变粗体?

image.png

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
451 次查看
注册日期: ‎09-14-2018


@ywxiao  已写:

你的理解是对的;还是因为没找到math库,需要手动添加math库;

现在还有2个问题:

1. math对应“m”,其他库对应关系是什么呢?

2. 在vitis里,为什么bool和true这种关键字没有变粗体?

image.png


hi @ywxiao 

1. c库的名字默认为 libxxx.a, 比如libm.a, libc.a, libxil.a。 -l 选项默认是去除前面的lib前缀和最后的扩展名.a

2. 我没有去check别的IDE是否加粗显示,但是C语言中bool和true都不是关键字,使用前是需要在别的地方define的。

----------------------------------------------------------------------------------------------
如果帖子有帮助,别忘“接受为解决方案”或“奖励”。谢谢!
Don't forget to "Accept as solution" or "Kudo" if it helps. Thanks!
----------------------------------------------------------------------------------------------

 

0 项奖励
Highlighted
Adventurer
Adventurer
445 次查看
注册日期: ‎12-06-2019

1. 那这些.a库文件在哪个目录?
2. bool,true是在stdbool.h中定义的;ADI的IDE,cces是支持加粗显示的;不知道vitis里面是否可以设置?
0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
433 次查看
注册日期: ‎09-14-2018

@ywxiao 


@ywxiao  已写:
1. 那这些.a库文件在哪个目录?
2. bool,true是在stdbool.h中定义的;ADI的IDE,cces是支持加粗显示的;不知道vitis里面是否可以设置?

1. 建议SDK工程下搜索下可以搜到,或者从makefile里看下。

2. 看起来Vitis目前没有支持。

0 项奖励
Highlighted
Adventurer
Adventurer
292 次查看
注册日期: ‎12-06-2019

1.sdk中没有找到math库;

2. 怎么判定哪些库需要手动添加呢?

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
214 次查看
注册日期: ‎09-14-2018

@ywxiao 


@ywxiao  已写:

1.sdk中没有找到math库;

2. 怎么判定哪些库需要手动添加呢?


这些问题可以通过详细查看makefile来解答,因为添加库的最终生效地方是在makefile中编译option里面。

如果编译已经能够成功,那么

1. lib 搜索目录为系统标准目录(standard system directory) + “-l” option指定的目录;关于GCC系统标准目录有哪些可以自行搜索下。

2. 所有用到的库都应该添加在link option中,要去makefile 的link option中确认下哪些已经包含了,剩余的就是自已要再添加的。

 

----------------------------------------------------------------------------------------------
如果帖子有帮助,别忘“接受为解决方案”或“奖励”。谢谢!
Don't forget to "Accept as solution" or "Kudo" if it helps. Thanks!
----------------------------------------------------------------------------------------------

0 项奖励
Highlighted
Adventurer
Adventurer
132 次查看
注册日期: ‎12-06-2019

要用<complex.h>中的标准库,在GUI中应该添加哪个字符呢?math对应“m”,complex对应“c”吗?
0 项奖励