Giả sử tôi có:GCC liên kết đến tên mối liên kết một đối tượng chia sẻ của
/usr/lib/libsomething.so.1
trên máy A;/usr/lib/libsomething.so.2
trên máy B.
Cả hai máy có /usr/lib/libsomething.so
liên kết tượng trưng đến libs tương ứng của họ.
nếu tôi liên kết sử dụng gcc
với -lsomething
(hoặc thậm chí /usr/lib/libsomething.so
) nó sẽ làm theo các liên kết tượng trưng, và ldd
trên máy A sản xuất cái gì đó như:
libsomething.so.1 => /usr/lib/libsomething.so.1
Điều này có nghĩa nó sẽ không thể tìm thấy thư viện trên máy B.
Bây giờ tôi biết đây là những thay đổi số phiên bản chính và tôi biết chúng có thể không tương thích, nhưng tôi sẵn sàng chấp nhận rủi ro đó. Những gì tôi muốn nói với các mối liên kết là để tìm kiếm libsomething.so
, và không tuân theo các liên kết tượng trưng để ldd
sẽ hiển thị
libsomething.so => /usr/lib/libsomething.so.1
trên A nhưng
libsomething.so => /usr/lib/libsomething.so.2
trên B. Và sau đó nạp sẽ thực hiện theo các liên kết đến bất kỳ phiên bản nào.
Ngoài ra, tôi không muốn tải chậm với dlopen hoặc bất kỳ thứ gì. Tôi muốn nó liên kết với đối tượng được chia sẻ tại thời gian biên dịch.
Điều này có thể thực hiện được không?
Tôi không xây dựng thư viện được đề cập, tôi nghĩ câu trả lời thực sự là không làm những gì tôi đề xuất, và nếu bạn thực sự muốn ăn gian, chỉ cần sử dụng liên kết tượng trưng. Điều này cung cấp một số thông tin tốt mặc dù vậy tôi chấp nhận. –