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
我正在使用这样的程序,其中 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