2015-06-07 5 views
0

Я использую программу, как это с math.h функцией «грех» и stdio.h функции «Printf» используетсяC библиотека станд не по всей видимости, связаны в объектном файле

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

int main() 
{ 

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

И, как указано by ephemient here, что libc.so и libm.so (для математических функций) должны были быть связаны с программой, хотя когда я запускаю otool (аналогично objdump) в объектном файле с параметром «-L», который печатает разделяемые библиотеки используется, ни один из libc.so или libm.so не распечатывается

otool -L com_ex1.o 

так что это за реас для этого? Я использую otool неправильно? или эти библиотеки не должны отображаться как общие библиотеки?

ответ

1

динамические библиотеки связаны с окончательной исполняемый файл, не в объектные файлы, так что вы должны работать (например)

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/[email protected] -> libSystem.dylib 
+0

Интересно, я не знал, что о OS X, я полагаю, что если использовать _glibc_, тогда не будет никакой разницы с тем, что ожидает OP. –

3

Вы связываете готовые двоичные файлы, промежуточные объектные файлы не связаны до тех пор, пока они не будут связаны вместе в конечном двоичном файле вместе с используемыми библиотеками.

Поэтому, когда вы создаете объектный файл, не происходит никакого связывания, поэтому логично, что нет никаких доказательств ссылки на любую библиотеку в объектном файле, потому что их не было.

+1

Да, это главное (не видел вас swer при написании моего). –