2011-06-05 43 views
13

Tôi đang cố gắng tìm thư viện C chuẩn trên Mac OS X. Tôi đã thử các đường dẫn như: "/usr/lib/libc.a" hoặc "/usr/lib/libm.a", nhưng không có tệp trên hệ thống. Bạn có thể cho tôi biết nơi để tìm thấy nó?Thư viện C chuẩn ở đâu trên Mac OS X?

Sau đó, tôi sử dụng thiết bị đầu cuối tại một máy Linux và chạy lệnh như:

ar t /usr/lib/libc.a 

Nó trả về một danh sách các tập tin và .o những file .o là như thế này:

svc.o 
xdr.o 
... 

là gì ý nghĩa của những tập tin này? tìm chúng ở đâu?

Trả lời

15

Các thư viện chuẩn là một phần của libSystem.dylib trên OS X.

+0

Dường như '/ usr/lib/libSystem.dylib' chỉ là một liên kết tượng trưng cho'/usr/lib/libSystem.B.dylib', tính đến 10.12. – GDP2

+0

@ GDP2: Có, '.B' là phiên bản hiện tại; các kịch bản liên kết nên * thường * liên kết với 'libSystem.dylib' (' -lSystem'), tuy nhiên. –

+0

Có, điều đó có thể giúp với khả năng tương thích ngược và như vậy. – GDP2

6

Có vẻ như nó là:

/usr/lib/libSystem.B.dylib 

trên máy tính của tôi (hệ điều hành MacOS X 10.6.7).

3

Để trả lời một nửa câu hỏi khác của bạn, OS X thường không sử dụng thư viện tĩnh (.a). Như vậy, không có libc.a (hoặc libSystem.a) trên OS X.

3

Để trả lời câu hỏi thứ hai của bạn: thư viện tĩnh được lưu trữ trong tệp lưu trữ, do đó .a. Vì vậy, chúng chỉ là các thùng chứa cho một loạt các tệp, giống như ZIP, TAR, RAR, v.v. trừ mọi nén. Các tệp đó được liệt kê theo số ar (viết tắt của tiện ích lưu trữ) là các tệp gốc được đóng gói trong lưu trữ. Bạn có thể giải nén nó và lấy các tập tin gốc.

Thư viện tĩnh hoàn toàn trái ngược với thư viện động. Một nội dung của thư viện tĩnh được trích xuất bởi trình liên kết và được đưa vào chương trình của bạn khi liên kết, như thể chúng chỉ là kết quả của các giai đoạn biên dịch khác của quá trình xây dựng chương trình của bạn.

Thư viện động OTOH không chỉ lưu trữ các tệp đối tượng mà còn là các tệp thực thi được liên kết và trình liên kết động ánh xạ chúng vào không gian địa chỉ quy trình liên kết và điều chỉnh các bảng biểu tượng để khớp với địa chỉ được ánh xạ.

1

Thực ra nó tồn tại ở /usr/lib/system/libsystem_c.dylib.

Bạn có thể xác minh rằng với: $ nm -gU /usr/lib/system/libsystem_c.dylib

Các vấn đề liên quan