2011-12-12 42 views
60

gccld cung cấp nhiều cách để chỉ định đường dẫn tìm kiếm cho thư viện — trong đó có các cờ -rpath-L. Các manpages tiết lộ không có sự khác biệt giữa hai lá cờ này, có hiệu quả nói rằng mỗi lá cờ thêm một thư viện vào đường dẫn tìm kiếm thư viện. Tuy nhiên, có vẻ lạ khi cả hai cờ thực hiện chính xác . Sự khác biệt, nếu có, giữa hai lựa chọn này là gì?Sự khác nhau giữa -rpath và -L là gì?

+1

Có thể bạn đang nghĩ đến '-rpath-link'? – ams

Trả lời

68

Bạn phải đọc một số bản lỗi thời của các trang man (nhấn mạnh thêm):

-rpath = dir
            Thêm một thư mục vào runtime đường dẫn tìm kiếm thư viện. Điều này được sử dụng
            khi liên kết thực thi ELF với các đối tượng dùng chung. Tất cả -rpath
            đối số nối và truyền cho runtime mối liên kết, mà
            sử dụng chúng để xác định vị trí đối tượng chia sẻ tại runtime.

vs

-L searchdir
--library-path = searchdir
            Thêm đường searchdir vào danh sách các đường dẫn ld sẽ tìm kiếm
            thư viện lưu trữ và tập lệnh kiểm soát ld.

Vì vậy, -L yêu cầu ld nơi tìm thư viện để liên kết khi liên kết. Bạn sử dụng điều này (ví dụ) khi bạn xây dựng dựa vào thư viện trong cây xây dựng của mình, thư viện này sẽ được đặt trong đường dẫn thư viện hệ thống bình thường theo make install. --rpath, mặt khác, lưu trữ đường dẫn đó bên trong tệp thực thi, để trình liên kết động thời gian chạy có thể tìm thấy các thư viện. Bạn sử dụng điều này khi thư viện của bạn nằm ngoài đường dẫn tìm kiếm trong thư viện hệ thống.

+7

Ghi chú: 1. Hầu hết thời gian khi người ta cần '-rpath =/some/weird/path', người ta cũng cần' -L/some/weird/path'. 2. Với 'gcc', ta cần sử dụng' -Wl, -rpath = dir'. –

+2

Tôi vẫn không hiểu tại sao cả hai đều cần thiết. Tôi có cùng trải nghiệm như n.m. ở trên. Những thông tin nào cần thiết từ thư viện vào thời gian xây dựng? Ngoài các tập tin h có thể, nguyên nhân. Nhưng đó là một điều tôi đoán ... –

+1

@ FredrikJohansson Đó sẽ là một chủ đề hợp lý cho một câu hỏi mới (giả sử nó chưa được yêu cầu, tất nhiên). Các biểu tượng có sẵn là cần thiết, ít nhất, nhưng có lẽ có những thứ khác. – derobert

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