2011-06-01 13 views
10

Xin lỗi về tiêu đề câu hỏi mơ hồ, tôi chỉ muốn xác định một số điều.Làm các thư viện tĩnh, phụ thuộc vào các slibs khác có cần 'mã' thực tế để chúng hoạt động không?

Thư viện tĩnh không liên kết với các thư viện tĩnh khác, phải không? Vì vậy, khi tôi viết một slib: A, mà sử dụng chức năng của một khác: B, tất cả tôi phải cung cấp là các tiêu đề của B đến A, và chỉ những người, ngay cả khi A thực sự sử dụng chức năng từ B? Không. Có?

Miễn là exe: X, sử dụng A, có B.lib được chỉ định làm đầu vào liên kết không? Vì vậy, tại thời điểm liên kết, mối liên kết mất A.lib, mà về cơ bản chỉ biết rằng một hàm B được gọi ở đâu đó bên trong mã của nó, và bằng cách nào đó điền vào thông tin đó từ B.lib, làm cho toàn bộ A.lib ' , trước khi X được liên kết với các bộ phận đang hoạt động của nó?

Động lực đằng sau những câu hỏi này là loại bỏ một số cảnh báo liên kết 4006 và loại bỏ định nghĩa kép, và tôi nghĩ rằng nên thực hiện thủ thuật, nếu đây thực sự là một cách hợp lệ để thực hiện.

Trả lời

8

Có, bạn đã nhận được nó khá nhiều. Các tệp thực thi (và DLL) phụ thuộc vào các thư viện tĩnh không thể được tạo mà không có các phụ thuộc được giải quyết, nhưng các thư viện tĩnh chứa phụ thuộc vào các thư viện tĩnh khác không yêu cầu các phụ thuộc đó được giải quyết tại thời gian tạo thư viện tĩnh. Trong thực tế, quá trình tạo thư viện tĩnh không liên quan đến trình liên kết.

+0

Butterworth: Thật tuyệt vời, cảm ơn vì đã làm rõ, không tin vào sự hiểu biết của tôi về nó, vì ngoài tài nguyên mạng tôi đang học nó, và hành vi này của slib đã ném tôi đi vào thời điểm đó. – Erius

2

Không thể thêm câu trả lời Neils ngoại trừ để nói rằng một thư viện tĩnh thực sự là một bó toàn bộ các tệp đối tượng (.o) được thu thập thành một tệp được lập chỉ mục duy nhất. Vì vậy, những gì làm việc cho một tập tin .o sẽ làm việc cho một thư viện tĩnh.

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