#include <math.h>
#include <stdio.h>
int main()
{
printf("%f", roundf(3.14));
}
我编译上面的代码(没有使用-lm),添加use ldd a.out,结果是
linux-vdso.so.1 => (0x00007fffab9ff000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd6da0f8000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd6da4eb000)
为什么 a.out 没有与libm链接但可以使用 roundf(或类似 sqrt 的东西)?我使用 nm 来测试 libc.so.6 和 ld-linux-x86064.so.2 但所有这些都没有 roundf 的符号。
我想知道在哪里定义了roundf,或者它已经被编译器内联了?(使用 gcc 4.7.3 和 gcc 4.6.3 进行测试)
答案是http://fedoraproject.org/w/index.php?title=UnderstandingDSOLinkChange