使用编译器内置程序而不链接c标准库

问题描述 投票:0回答:1

我见过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 libc
1个回答
1
投票

这个问题的答案取决于您使用的是哪个C编译器。您似乎正在使用GCC;该编译器的答案是否定的。

这些函数是“内置的”,因为GCC知道它们的名称并可以优化对它们的some调用,例如fmod(7.0, 2.0)可能在编译时进行评估。但是GCC不提供这些功能的运行时定义。它依靠C库(一个独立的项目)来提供它们。

© www.soinside.com 2019 - 2024. All rights reserved.