0

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

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

int main ()
{

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

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

otool -L com_ex1.o

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

4

2 回答 2

3

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

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

于 2015-06-07T13:44:37.397 回答
1

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

otool -L com_ex1

这应该显示类似

com_ex1:
    /usr/lib/libSystem.B.dylib(兼容版本 1.0.0,当前版本 1213.0.0)

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

$ ls -l /usr/lib/libm.dylib
lrwxr-xr-x 1 根轮 15 月 3 日 01:39 /usr/lib/libm.dylib@ -> libSystem.dylib
于 2015-06-07T13:46:12.500 回答