2010-01-18 51 views
7

Làm thế nào tôi có thể bắt buộc tự động tạo một thư viện được chia sẻ chuẩn, thay vì sử dụng một thư viện đã được chỉnh sửa? Thông thường, tôi sẽ tạo ra abc.so được tham chiếu với đường dẫn đầy đủ và được tải vào chương trình chính. Có cách nào để buộc AM phải làm như vậy không? Nếu tôi liệt kê nó là _LIBRARY, tự động than phiền: 'abc.so' is not a standard library name; did you mean 'libabc.a'Thư viện được chia sẻ tự động và tiêu chuẩn

Chỉ cần làm rõ: Có, tôi chỉ cần .so hỗ trợ - không có số liệu thống kê. Và có, tôi muốn một tên tập tin tùy chỉnh.

+0

Lol ... Đây là một dấu hiệu điển hình của quá kỹ thuật bởi các kỹ sư. Nó xảy ra khi các kỹ sư được phép lái các yêu cầu. Họ lấy một cái gì đó đơn giản và làm cho nó rất phức tạp của nó hầu như không sử dụng được (nếu nó có thể sử dụng ở tất cả). – jww

Trả lời

6

Tự động không biết cách xây dựng thư viện được chia sẻ vì không có cách nào để di chuyển. Nếu bạn muốn có một thư viện được chia sẻ với Automake, bạn phải sử dụng Automake + Libtool. Lưu ý rằng bạn có thể dễ dàng định cấu hình libtool để không xây dựng bất kỳ thư viện tĩnh nào (với LT_INIT([disable-static]) trong configure.ac) theo mặc định.

+0

Không thực sự những gì tôi đã có trong tâm trí, nhưng phải chấp nhận một cái gì đó – viraptor

+0

Hmmm ... Điều này dường như không phải là một giải pháp tốt khi được nói rõ ràng để xây dựng thư viện tĩnh. Xem thêm [27.8 Per-Object Flags Emulation] (https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html) trong hướng dẫn sử dụng Automake. – jww

0

IIRC, không có gì đặc biệt về thư viện được tạo với sự trợ giúp của libtool, trừ khi bạn liên kết với libltdl. Nếu bạn không muốn sử dụng libtool, bạn có sức mạnh để lựa chọn và không quan tâm quá nhiều về tính di động, sau đó bạn được tự do sử dụng automake mà không có libtool. Tôi khuyên bạn nên sử dụng sức mạnh của libtool thay thế.

Thực ra, tôi thậm chí không biết những gì _LIBRARY là tốt cho, đã không tìm thấy nó trong the manual/Linking section.

1

Thư viện libtoolized là một trình bao bọc xung quanh một hoặc nhiều thư viện chuẩn. Bạn có thể tìm thấy các thư viện này trong ".libs" sau khi chạy "make", hoặc trong "$ prefix/lib" sau khi chạy "make install".

Trên máy Linux, cuối cùng bạn sẽ tìm thấy tệp có tên "libabc.so".

7

libtool là cách để thực hiện. Nếu bạn muốn có một tên tùy chỉnh, thêm tùy chọn -module để _LDFLAGS, ví dụ:

plugindir= /some/where 
plugin_LTLIBRARIES= abc.la 
abc_la_LDFLAGS= -module 
Các vấn đề liên quan