gcc
và ld
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
và -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ì?
Trả lời
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.
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'. –
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 ... –
@ 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
- 1. Sự khác nhau giữa: = và + = trong tạo tệp là gì?
- 2. sự khác nhau giữa DEFAULT_SIZE và PREFERRED_SIZE là gì?
- 3. Sự khác nhau giữa WPF và WinForms là gì?
- 4. Sự khác nhau giữa JavaScript và Java là gì?
- 5. Sự khác nhau giữa ODBC và OleDB là gì?
- 6. Sự khác nhau giữa SGML và XML là gì?
- 7. Sự khác nhau giữa DefaultSelenium và RemoteWebDriver là gì?
- 8. Sự khác nhau giữa RMI và Corba là gì?
- 9. Sự khác nhau giữa scgi và wsgi là gì?
- 10. Sự khác nhau giữa wsHttpBinding và ws2007HttpBinding là gì?
- 11. Sự khác nhau giữa Pingback và Trackback là gì?
- 12. Trong Python, sự khác nhau giữa ".append()" và "+ = []" là gì?
- 13. Sự khác nhau giữa AxInterop và Interop là gì?
- 14. Sự khác nhau giữa CellClick và CellMouseClick là gì?
- 15. Sự khác nhau giữa .bashrc, .bash_profile và .environment là gì?
- 16. Sự khác nhau giữa JSP và Facelets là gì?
- 17. Sự khác nhau giữa hg quên và hg là gì?
- 18. Sự khác nhau giữa GDI và GDI + là gì?
- 19. Sự khác nhau giữa đá quý và plugin là gì?
- 20. Sự khác nhau giữa metaClass.methods và metaClass.metaMethods là gì?
- 21. Sự khác nhau giữa kEND và $ end là gì?
- 22. Sự khác nhau giữa java và jsp là gì?
- 23. Sự khác nhau giữa Application.Run() và Form.ShowDialog() là gì?
- 24. Sự khác nhau giữa -0 và 0 là gì?
- 25. Sự khác nhau giữa HTTP 1.0 và 1.1 là gì?
- 26. Sự khác nhau giữa java.lang.Math và java.lang.StrictMath là gì?
- 27. Sự khác nhau giữa " " và "" là gì?
- 28. Sự khác nhau giữa Spring BeanFactoryAware và ApplicationContextAware là gì?
- 29. sự khác nhau giữa SCRIPT_FILENAME và SCRIPT_NAME là gì?
- 30. Sự khác nhau giữa JSP và JSTL là gì?
Có thể bạn đang nghĩ đến '-rpath-link'? – ams