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

C std library don't appear to be linked in object file

我正在使用这样的程序,其中 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”的目标文件上打印使用的共享库,None of libc.so or libm.so 被打印出来

otool -L com_ex1.o

那么这是什么原因呢?我使用otool错了吗?或者那些库不应显示为共享库?

您 link 完成的二进制文件,中间目标文件不会 link 编辑,直到它们与使用的库一起 link 编辑在最终二进制文件中。

所以当你生成一个目标文件时,没有 linking 发生,因此没有证据表明目标文件中的任何库都有 link,因为有 none.

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

otool -L com_ex1

这应该显示类似

的内容
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