2012-06-26 28 views
5

Tôi muốn xây dựng một thư viện chia sẻ mà sử dụng ZipArchive sử dụng GNU Autotools nhưng tôi đang gặp vấn đề này:Tại sao Libtool không muốn liên kết với một thư viện tĩnh?

Warning: linker path does not have real file for library -lziparch. 
I have the capability to make that library automatically link in when 
you link to this library. But I can only do this if you have a 
shared version of the library, which you do not appear to have 
because I did check the linker path looking for a file starting 
with libziparch and none of the candidates passed a file format test 
using a file magic. Last file checked: /usr/local/ZipArchive/ZipArchive/libziparch.a 
The inter-library dependencies that have been dropped here will be 
automatically added whenever a program is linked with this library 
or is declared to -dlopen it.

Nếu tôi xây dựng một thư viện tĩnh hoặc nếu tôi sử dụng một thư viện chia sẻ của ZipArchive nó hoạt động nhưng vấn đề là makefile đi kèm với mã nguồn ZipArchive chỉ xây dựng một thư viện tĩnh.

Làm cách nào để buộc Libtool liên kết với một thư viện tĩnh?

Trả lời

4

Nói chung, lưu trữ tĩnh được tạo bằng các tệp đối tượng không phải pic và chúng không thể được đưa vào thư viện được chia sẻ.

Thông báo này cho bạn biết, là khi một chương trình liên kết tới thư viện CỦA BẠN bằng Libtool, thì thư mục đó sẽ được thêm vào liên kết. Vì vậy, bạn không cần cần để thay đổi bất kỳ điều gì trừ khi bạn đang xây dựng mô-đun cho ngôn ngữ thông dịch. Trong trường hợp đó, bạn sẽ phải xây dựng ZipArchive như một thư viện được chia sẻ. Ngoài ra, điều này sẽ không làm việc trên một nền tảng như MS Windows, nơi thư viện chia sẻ (DLL) phải giải quyết tất cả các biểu tượng của họ tại thời gian liên kết.

Tất cả những gì đã nói, nếu lib tĩnh ziparch của bạn là mã PIC, bạn có thể sử dụng cờ -whole-archive khi liên kết nó với thư viện của bạn. Đây sẽ là giải pháp di động ít nhất mặc dù.

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