#include <math.h>
#include <stdio.h>
int main()
{
printf("%f", roundf(3.14));
}
我編譯上面的代碼(未使用-lm),添加使用LDD的a.out,結果是爲什麼它不需要鏈接libm?
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
這些存在於libc IIRC中。 – 2013-04-25 00:26:40
IIRC代表交叉工具嗎? – snyh 2013-04-25 00:32:45
IIRC =「如果我記得正確」 – Tim 2013-04-25 00:41:57