2008-10-03 26 views
16

Giả sử tôi đã thêm thư viện foo.so.1.1.1 vào đường dẫn được bao gồm trong /etc/ld.so.conf Khi tôi chạy ldconfig trên hệ thống, tôi nhận các liên kết foo.so.1.1 và foo. so.1 đến foo.so.1.1.1Linux - Sử dụng ldconfig

Làm cách nào để thay đổi hành vi cũng nhận được liên kết foo.so đến foo.so.1.1.1?

+0

http://stackoverflow.com/questions/462100/bash-script-to-create-symbolic-links-to-shared-libraries/8144642#8144642 – user1016736

Trả lời

24

ldconfig trông bên trong tất cả các đối tượng được chia sẻ mà nó tìm thấy, để tìm kiếm tên soname. Sau đó, nó tạo liên kết bằng cách sử dụng tên soname đó làm tên của liên kết. Đó là thông thường (nhưng xa phổ biến) cho soname là tên và phiên bản chính của thư viện, do đó thư viện của bạn foo.so.1.1 sẽ có một soname của foo.so.1 và ldconfig sẽ tạo liên kết được gọi là.

Không có phần nào của hệ thống thời gian chạy tìm kiếm hoặc biết bất kỳ điều gì về tên foo.so. Được sử dụng khi bạn liên kết các chương trình của bạn với thư viện. Không có điểm nào trong liên kết đó trừ khi bạn cũng có tất cả các tệp phát triển khác (tiêu đề, vv) cho thư viện, do đó, không có điểm nào trong ldconfig tự động tạo nó. Và vì tên của liên kết để sử dụng chỉ là một quy ước khác và trong trường hợp này không được lưu trữ bên trong tệp, không có cách nào để ldconfig biết tên cần tạo.

Thông thường, điều này sẽ được tạo theo cách thủ công, trong mục tiêu cài đặt của Makefile; khi một thư viện được đóng gói để phân phối Linux, liên kết này thường tồn tại trong gói -dev cùng với các tệp tiêu đề.

3

Chỉ cần làm cho các liên kết mềm tự hỏi:

ln -s /usr/lib/foo.so.1.1.1 /usr/lib/foo.so 

Lưu ý rằng cho các ứng dụng để sử dụng thư viện theo cách này, họ cần phải được liên kết một cách rõ ràng so với đối tượng chia sẻ không phiên bản. IE: đây là cơ chế để bỏ qua hoàn toàn hệ thống kết hợp phiên bản của trình tải động.

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