我见过this question,其答案得出的结论是,内置数学函数(例如__builtin_sin
,__builtin_fmod
等)可以代替C标准库中的函数。
我编写了以下程序:
float fmod_test(float arg1, float arg2) {
return __builtin_fmod(arg1, arg2)
}
void _start() {}
并且编译如下:
gcc -nostdlib test.c -o test
很遗憾,我收到以下错误:
/tmp/ccuHpvCP.o: In function `fmod_test':
test.c:(.text+0x1d): undefined reference to `fmod'
collect2: error: ld returned 1 exit status
__builtin_fmod
似乎在后台使用fmod
,需要链接到它,而不是像“内置”功能所期望的那样生成内联版本。
是否可以使用这些内置函数而无需链接到外部库?
这个问题的答案取决于您使用的是哪个C编译器。您似乎正在使用GCC;该编译器的答案是否定的。
这些函数是“内置的”,因为GCC知道它们的名称并可以优化对它们的some调用,例如fmod(7.0, 2.0)
可能在编译时进行评估。但是GCC不提供这些功能的运行时定义。它依靠C库(一个独立的项目)来提供它们。