Các tập tin .a và .so là gì?


425

Tôi hiện đang cố gắng chuyển một ứng dụng C sang AIX và đang bị lẫn lộn. Các tập tin .a và .so là gì và chúng được sử dụng như thế nào khi xây dựng / chạy một ứng dụng?


114
một là thư viện archive và một là bject sharedo
Shiplu Mokaddim

Câu trả lời:


482

Thư viện lưu trữ (.a) được liên kết tĩnh tức là khi bạn biên dịch chương trình của mình với tùy chọn -c trong gcc. Vì vậy, nếu có bất kỳ thay đổi nào trong thư viện, bạn cần biên dịch và xây dựng lại mã của mình.

Ưu điểm của .so (đối tượng chia sẻ) so với thư viện .a là chúng được liên kết trong thời gian chạy tức là sau khi tạo tùy chọn .o tệp -o của bạn trong gcc. Vì vậy, nếu có bất kỳ thay đổi nào trong tệp .so, bạn không cần phải biên dịch lại chương trình chính của mình. Nhưng hãy chắc chắn rằng chương trình chính của bạn được liên kết với tệp .so mới bằng lệnh ln.

Điều này sẽ giúp bạn xây dựng các tập tin .so. http://www.yolinux.com/TUTORIALS/L LibraryArchives-StaticAndDocate.html

Hi vọng điêu nay co ich.


2
bất kỳ trong số này liên quan đến pic(mã độc lập vị trí)?
transang

213

.a là các thư viện tĩnh. Nếu bạn sử dụng mã được lưu trữ bên trong chúng, nó sẽ được lấy từ chúng và được nhúng vào tệp nhị phân của riêng bạn. Trong Visual Studio, đây sẽ là các tệp .lib.

.so là các thư viện động. Nếu bạn sử dụng mã được lưu trữ bên trong chúng, nó sẽ không được lấy và nhúng vào tệp nhị phân của riêng bạn. Thay vào đó, nó chỉ được tham chiếu, do đó nhị phân sẽ phụ thuộc vào chúng và mã từ tệp để được thêm / tải khi chạy. Trong Visual Studio / Windows, đây sẽ là các tệp dll (với các tệp .lib nhỏ chứa thông tin liên kết).


hi có tùy chọn nào để dịch ngược tệp .so trong mã c / c ++ không?
Jishant


Một .libtệp nhỏ .dllđược gọi là thư viện nhập khẩu.
Lập trình viên định hướng tiền

13

Các tệp .a thường là các thư viện được liên kết tĩnh (hoặc lưu trữ chính xác hơn) và
.so là các thư viện được liên kết động.

Để thực hiện một cổng, bạn sẽ cần mã nguồn được biên dịch để tạo chúng hoặc các tệp tương đương trên máy AIX của bạn.


Làm cách nào để xây dựng ứng dụng của tôi để sử dụng các tệp .so?
Dunc

Có nhiều tài liệu tham khảo tuyệt vời để xây dựng cả hai loại thư viện và liên kết với chúng trên web. Google là bạn của bạn.
Con trỏ David

@Dunc - Có một vài cách. Bạn có một makefile? Thông thường, lệnh tập hợp toàn bộ chương trình (và do đó gọi trình liên kết) sẽ chỉ định các vị trí cần tìm tệp thư viện với -L / dir / dir1 /.../ và cũng có thể đặt tên thư viện rõ ràng bằng -lname. Bạn sẽ thấy rằng tên thật là libname.a hoặc libname.so. Trình liên kết sau đó có thể tìm ra phải làm gì nếu đây là một chương trình hợp lý bình thường. Nhưng bạn vẫn gặp vấn đề khi tạo hoặc tìm tệp .so. Bạn đã có mã nguồn để xây dựng nó hay thư viện AIX chưa?
xe cứu thương

10

Chúng được sử dụng trong giai đoạn liên kết. .acác tệp được liên kết tĩnh và .socác tệp được sắp xếp theo liên kết, do đó thư viện là cần thiết bất cứ khi nào bạn chạy exe.

Bạn có thể tìm thấy nơi chúng được lưu trữ bằng cách xem bất kỳ thư mục lib nào ... /usr/lib/libcó hầu hết chúng, và đó cũng là LIBRARY_PATHbiến môi trường.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.