2012-01-25 31 views

Trả lời

9

Nếu bạn không bỏ biểu tượng, bạn có thể sử dụng nm để xem tên của tệp đối tượng (.o).

$ nm foo.a 
foo.a(objectFile1.o): 
0000000000000000 T _function1 
foo.a(objectFile2.o): 
0000000000000000 T _function2 

Kết quả này sẽ khác nhau trên các hệ điều hành khác nhau. Ví dụ, đây là sản phẩm của những biểu tượng trong libz.a trên một hệ thống Ubuntu:

$ nm libz.a | grep ".o:" 
adler32.o: 
compress.o: 
crc32.o: 
gzio.o: 
uncompr.o: 
deflate.o: 
trees.o: 
zutil.o: 
inflate.o: 
infback.o: 
inftrees.o: 
inffast.o: 

Mỗi phòng trong số trên 12 .o file là đơn vị dịch trong mã gốc, biên soạn với -c tùy chọn để gcc. Tôi đã sử dụng grep để bỏ qua vô số các ký hiệu được xác định và tham chiếu trong từng tệp đối tượng. Sau khi biên dịch, các tệp đối tượng này sau đó được kết hợp thành một thư viện tĩnh với ar.

ar cũng có thể trích xuất các tệp đối tượng. Cùng libz.a:

$ ar xv libz.a 
x - adler32.o 
x - compress.o 
x - crc32.o 
x - gzio.o 
x - uncompr.o 
x - deflate.o 
x - trees.o 
x - zutil.o 
x - inflate.o 
x - infback.o 
x - inftrees.o 
x - inffast.o 

Tùy chọn x là chiết xuất và v là dài dòng, mà in tên của các tập tin đối tượng vì nó được chiết xuất.

+0

Danh sách này xuống tất cả các đối tượng được sử dụng bên trong tệp. Lệnh in chỉ là các tệp bên trong .a. Ví dụ, các tệp .o bên trong .a. – Abhinav

+0

Đó chính xác là những gì 'nm' nói với bạn. Ví dụ, trên máy Ubuntu của tôi: 'nm /usr/lib/libz.a | grep ".o:" 'trả về với 12 tệp' .'' bao gồm 'libz.a'. Ý bạn là vậy đúng không? – greg

+0

Có, bạn đã đúng. Nhưng sử dụng nm my.a | grep ".o:" trả về phương thức tôi gọi một số tệp .o bên trong nhưng không liệt kê tất cả các tệp .o. Tôi có làm gì sai ở đây không? – Abhinav

0

Điều này làm việc với lệnh dưới đây: nm <> | grep ".o" | sed "s /. (// g" | sed "s /). // g" | uniq

2

Tôi nghĩ rằng nó sẽ đơn giản hơn để sử dụng ar cho những gì nó có nghĩa là (thao tác tài liệu lưu trữ)

ar t foo.a 

Từ trang người đàn ông:

-t Liệt kê các tập tin định theo thứ tự mà chúng xuất hiện trong kho lưu trữ, mỗi tệp trên một dòng riêng biệt. Nếu không có tệp nào được chỉ định, tất cả các tệp trong lưu trữ được liệt kê.

man 1 ar để biết thêm thông tin.

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