Câu trả lời:
Nó là một tập tin văn bản bao gồm một mô tả của thư viện.
Nó cho phép libtool
tạo ra các tên độc lập với nền tảng.
Ví dụ: libfoo
đi tới:
Trong Linux:
/lib/libfoo.so # Symlink to shared object
/lib/libfoo.so.1 # Symlink to shared object
/lib/libfoo.so.1.0.1 # Shared object
/lib/libfoo.a # Static library
/lib/libfoo.la # 'libtool' library
Theo Cygwin :
/lib/libfoo.dll.a # Import library
/lib/libfoo.a # Static library
/lib/libfoo.la # libtool library
/bin/cygfoo_1.dll # DLL
Trong Windows MinGW:
/lib/libfoo.dll.a # Import library
/lib/libfoo.a # Static library
/lib/libfoo.la # 'libtool' library
/bin/foo_1.dll # DLL
Vì vậy, libfoo.la
tệp duy nhất được bảo tồn giữa các nền tảng bằng cách libtool
cho phép hiểu những gì xảy ra với:
Không phụ thuộc vào một nền tảng thực hiện cụ thể của các thư viện.
libtool
để liên kết các tệp đối tượng ( gnu.org/software/libtool/manual/html_node/Using-Automake.html ) nhưng nếu tôi muốn phân phối thư viện mà không có .la, điều đó có nghĩa là sẽ rất khó để liên kết với nó bằng Cygwin hay mingw?
Theo http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files , họ cần thiết để xử lý các phụ thuộc. Nhưng sử dụng pkg-config có thể là một lựa chọn tốt hơn:
Trong một thế giới hoàn hảo, mọi thư viện tĩnh cần phụ thuộc sẽ có tệp .pc riêng cho pkg-config và mọi gói cố gắng liên kết tĩnh với thư viện đó sẽ sử dụng pkg-config --static để khiến các thư viện liên kết đến.
Tôi tìm thấy lời giải thích rất hay về các tệp .la tại đây http://openbooks.sourceforge.net/books/wga/deals-with-lologists.html
Tóm tắt (Theo cách tôi hiểu): Bởi vì libtool xử lý các thư viện tĩnh và động trong nội bộ (thông qua --dposed-shared hoặc --disable-static), nó tạo ra một trình bao bọc trên các tệp thư viện mà nó xây dựng. Chúng được coi là các tệp thư viện nhị phân với trong môi trường được hỗ trợ libtool.