2013-01-06 21 views
5

tôi thành công có thể liên kết chống lại libawesomium-1.6.5.so:Liên kết chống lại Thư viện chia sẻ, kêu gọi chương trình mà không cần LD_LIBRARY_PATH tùy chỉnh

-L-L. 
-L-lawesomium-1.6.5 
-L-ldl 

libawesomium-1.6.5.so là trong cùng thư mục như thực thi của tôi, bây giờ nếu tôi cố gắng gọi cho chương trình của tôi (tôi sẽ gọi nó ăn xin cho bây giờ), nó tồn tại với:

./prog: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 

vì vậy, tôi thực hiện một liên kết tượng trưng libawesomium-1.6.5.so.0 trỏ đến libawesomium-1.6.5.so, chạy prog một lần nữa mang lại cho tôi những lỗi tương tự, gọi nó với một tùy chỉnh LD_LIBRARY_PATH=./ hoạt động, nhưng tôi muốn phân phối prog và tôi muốn người dùng có thể sử dụng prog với quyền root (cài đặt awesomium thành /usr/lib v.v.) và không cần thiết lập LD_LIBRARY_PATH. Một tùy chọn sẽ là một kịch bản lệnh shell đặt LD_LIBRARY_PATH, nhưng tôi thích một cách khác (tôi cũng nghe thấy thiết lập LD_LIBRARY_PATH là một ý tưởng tồi).

Hơn nữa, sẽ rất tuyệt nếu không cần phải tạo liên kết tượng trưng đến libawesomium-1.6.5.so.0.

EDIT:

Đi qua -rpath=. đến các công trình liên kết! Nhưng awesomium tiếc là không thể đối phó với nó:

/.../awesomium_test/AwesomiumProcess: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 

Sử dụng -rpath và thiết lập LD_LIBRARY_PATH từ bên trong prog làm việc

Trả lời

6

Nếu bạn sử dụng gcc, bạn có thể vượt qua -Wl,-rpath=lib_directory để làm cho tệp thực thi tìm kiếm thư viện trong thư mục lib_directory.

Hơn nữa, đối số này chấp nhận một giá trị đặc biệt $ORIGIN đại diện cho thư mục chứa chương trình đã thực hiện. Vì vậy, nếu bạn vượt qua -Wl,-rpath='$ORIGIN' tới gcc, bạn sẽ có thể giữ libawesomium-1.6.5.so trong cùng một thư mục so với chương trình.

+0

Chà hoạt động này, cảm ơn! Cũng không hoàn toàn, xem chỉnh sửa của tôi. – dav1d

+0

Tôi đã tìm ra! Tôi có thể đặt 'LD_LIBRARY_PATH' trước khi tải awesomium bên trong chương trình của tôi. – dav1d

+0

Bạn nên chuyển '-Wl, -rpath = '$ ORIGIN'' thay vì' -Wl, -rpath = .' và LI_LIBRARY_PATH sẽ là vô dụng. – Julien

1

Lỗi này là bởi vì. không có trong con đường của bạn. Các tùy chọn của bạn là phân phối tập lệnh bash chạy nhị phân với tập LD_LIBRARY_PATH, như bạn nói, hoặc sao chép đối tượng được chia sẻ vào/usr/lib hoặc/usr/local/lib hoặc bất cứ nơi nào phù hợp trên nền tảng cụ thể đó.

Thực sự không có phím tắt, trừ khi bạn muốn liên kết tĩnh.

+0

Vâng, tôi muốn tránh cả hai cách. Cảm ơn bạn đã làm rõ rằng không có cách nào khác. Liên kết tĩnh không hoạt động, bởi vì không có lib tĩnh cho awesomium (nguồn đóng, chỉ .so được cung cấp) – dav1d

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