ความแตกต่างระหว่าง -rpath และ -L คืออะไร?


91

gccและldมีหลายวิธีในการระบุเส้นทางการค้นหาสำหรับไลบรารี - ระหว่างนั้น-rpathและ-Lแฟล็ก การจัดการไม่เปิดเผยความแตกต่างระหว่างแฟล็กทั้งสองนี้อย่างมีประสิทธิภาพโดยบอกว่าแต่ละแฟล็กจะเพิ่มไลบรารีไปยังพา ธ การค้นหาไลบรารี แต่ก็ดูแปลกที่ธงทั้งสองทำเหมือนกันทุกประการ อะไรคือความแตกต่างระหว่างสองตัวเลือกนี้?


2
บางทีคุณอาจจะนึกถึง-rpath-link?
AMS

คำตอบ:


107

คุณต้องอ่านสำเนาการจัดการที่ล้าสมัย (เพิ่มการเน้นย้ำ):

-rpath = dir
      เพิ่มไดเร็กทอรีไปยังพา ธ การค้นหาไลบรารีรันไทม์ ใช้
      เมื่อเชื่อมโยงไฟล์ปฏิบัติการ ELF กับอ็อบเจ็กต์ที่แชร์
      อาร์กิวเมนต์-rpath ทั้งหมดจะเชื่อมต่อกันและส่งผ่านไปยังตัวเชื่อมโยงรันไทม์ซึ่ง
      ใช้เพื่อค้นหาวัตถุที่แบ่งใช้ที่รันไทม์

เทียบกับ

-L searchdir
--library-path = searchdir
      เพิ่มพา ธ searchdir ในรายการพา ธ ที่ldจะค้นหา
      ไลบรารีเก็บถาวรและสคริปต์ควบคุม ld

ดังนั้น-Lบอกldตำแหน่งที่จะค้นหาไลบรารีที่จะเชื่อมโยงเมื่อทำการเชื่อมโยง คุณสามารถใช้นี้ (ตัวอย่าง) make installเมื่อคุณกำลังสร้างกับห้องสมุดในการสร้างต้นไม้ของคุณซึ่งจะถูกวางในเส้นทางระบบห้องสมุดตามปกติ --rpathในทางกลับกันเก็บพา ธ นั้นไว้ในไฟล์ปฏิบัติการเพื่อให้รันไทม์ไดนามิคลิงค์เกอร์สามารถค้นหาไลบรารีได้ คุณใช้สิ่งนี้เมื่อไลบรารีของคุณอยู่นอกเส้นทางการค้นหาไลบรารีระบบ


18
หมายเหตุ: 1. เวลาส่วนใหญ่เมื่อต้องการ-rpath=/some/weird/pathหนึ่ง-L /some/weird/pathก็ต้องการเช่นกัน 2. gccหนึ่งความต้องการใช้-Wl,-rpath=dir.
. 'สรรพนาม' ม.

5
ฉันยังไม่เข้าใจว่าทำไมต้องใช้ทั้งสองอย่าง ฉันมีประสบการณ์เช่นเดียวกับนาโนเมตรด้านบน ต้องการข้อมูลอะไรจากห้องสมุดในเวลาสร้าง นอกเหนือจากไฟล์ h ที่เป็นไปได้สาเหตุ แต่นั่นเป็นอีกสิ่งหนึ่งที่ฉันเดา ...
Fredrik Johansson

1
@FredrikJohansson นั่นเป็นหัวข้อที่สมเหตุสมผลสำหรับคำถามใหม่ (แน่นอนว่ายังไม่ได้ถาม) จำเป็นต้องมีสัญลักษณ์ที่มีอยู่อย่างน้อยที่สุด แต่อาจมีสิ่งอื่น ๆ
derobert

4
เพิ่มคำถามติดตามที่: stackoverflow.com/questions/28096133/…
Fredrik Johansson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.