Bạn có thể thay đổi mục tiêu liên kết động mà không cần biên dịch lại không?


7

Tôi đã tải xuống một chương trình không may không đến như một bản phân phối nguồn. Khi tôi chạy nó, tôi gặp lỗi

lỗi trong khi tải thư viện dùng chung: libjpeg.so.62: không thể mở tệp đối tượng dùng chung: Không có tệp hoặc thư mục như vậy

Chương trình dường như đã được liên kết với một phiên bản libjpeg cụ thể mà bản phân phối của tôi không có. Tạo một liên kết tượng trưng /usr/lib32/libjpeg.so.62cho thực tế của tôi sẽ libjpeg.sokhắc phục vấn đề, nhưng chọc vào /usr/lib32chỉ để làm cho một chương trình hoạt động có vẻ ngu ngốc và trên đầu trang.

Có cách nào (sans biên dịch lại) để làm cho chương trình tự động liên kết libjpeg.sothay vì libjpeg.so.62không?

FWIW, filethông tin cho chương trình là

ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

Câu trả lời:


5

Nhị phân - chỉnh sửa tệp ( vim -bví dụ) và thay thế bất kỳ sự xuất hiện nào /usr/lib32/libjpeg.so.62bằng một số đường dẫn đến libjpeg.sokích thước của bạn có cùng kích thước như ví dụ/usr/lib//////libjpeg.so

/usr/lib32/libjpeg.so.62
/usr/lib//////libjpeg.so

1
Thay thế .62bằng các ký tự null đã thực hiện thủ thuật. Cảm ơn!
Matt Kline

Tôi dám khẳng định rằng việc kết hợp với / usr / lib32 / bằng cách tạo liên kết tượng trưng sẽ an toàn hơn nhiều so với chỉnh sửa nhị phân. 2 xu của tôi. Ngoài ra có gì sai với liên kết mềm một lần nữa?
Arpith

@Arpith Không có gì sai với các liên kết tượng trưng, ​​nhưng tôi thấy không có điểm nào trong việc thay đổi toàn bộ hệ thống của mình chỉ để hỗ trợ một ứng dụng duy nhất được liên kết một cách nghi vấn.
Matt Kline

2
Ứng dụng có thể được liên kết chính xác, các thư viện có phiên bản cho một lý do . Khả năng tương thích ABI là mối quan tâm chính, xem ngược dòng-tracker.org/versions/libjpeg.html chẳng hạn. Một phương pháp đặt tên như vậy là thô, nhưng hiệu quả, có những lựa chọn thay thế .
mr.spuratic

1
@ mr.spuratic, các bản phân phối khác nhau có các sơ đồ đánh số khác nhau. Loại vấn đề này thường xảy ra với libjpeg và với openssl, ví dụ như debian và redhat làm điều đó khác đi. Chỉnh sửa nhị phân là an toàn như thêm liên kết tượng trưng.
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.