考虑以下测试代码:
#include <tgmath.h>
void test()
{
double x=cos(4.5);
}
编译它
arm-none-eabi-gcc test.c -c
在 Ubuntu 18.04 (gcc 6.3.1, newlib 2.4.0) 上工作正常,但在 Ubuntu 20.04 (gcc 9.2.1, newlib 3.3.0) 上出现以下错误:
In file included from test.c:1:
test.c: In function 'test':
test.c:5:14: error: 'ccosl' undeclared (first use in this function); did you mean 'ccosh'?
5 | double x=cos(4.5);
| ^~~
test.c:5:14: note: each undeclared identifier is reported only once for each function it appears in
test.c:5:14: error: argument 6 of '__builtin_tgmath' is not a function pointer
显然, 的定义以cos
某种方式发生了变化,因此它现在提到ccosl
了未在任何地方声明的内容。
如果我从 更改tgmath.h
为math.h
,则不再出现错误。这当然只是一种解决方法,而不是修复,因为这样我就失去了float
vs的类型通用性double
。
我的问题是:如何使它正常工作?我是否必须添加一些编译选项,或者它只是工具链中的一个错误?