C std库似乎没有在目标文件中链接

时间:2015-06-07 13:24:07

标签: c macos unix objdump otool

我正在使用这样的程序,使用math.h函数“sin”和stdio.h函数“printf”使用

#include <stdio.h>
#include <math.h>

int main ()
{

    int x = sin(14);
    printf("hello");
    return 0;
}

正如ephemient here所述,libc.so和libm.so(用于数学函数)应该与程序链接,尽管当我在目标文件上运行otool(类似于objdump)时选项“-L”打印使用的共享库,打印出libc.so或libm.so

otool -L com_ex1.o

那么这是什么原因?我用otool错了吗?或者那些库不应该作为共享库出现?

2 个答案:

答案 0 :(得分:3)

您链接完成的二进制文件,中间对象文件在最终二进制文件中与所使用的库链接在一起之前不会链接。

因此,当您生成目标文件时,不会发生链接,因此没有证据表明目标文件中没有链接到任何库,这是合乎逻辑的,因为没有链接。

答案 1 :(得分:1)

动态库链接到最终的可执行文件,而不是 到目标文件,所以你应该运行(例如)

qConfessions

这应该显示类似

的内容
com_ex1:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

因为在OS X上,数学库是libSystem的一部分:

$ ls -l /usr/lib/libm.dylib
lrwxr-xr-x  1 root  wheel  15  3 Jun 01:39 /usr/lib/libm.dylib@ -> libSystem.dylib