Skip to main content

ทั้งหมดเกี่ยวกับคำสั่ง Linux / Unix: ld

พื้นฐาน Linux #1 - การใช้คำสั่งเบื้องต้น (มิถุนายน 2026)

พื้นฐาน Linux #1 - การใช้คำสั่งเบื้องต้น (มิถุนายน 2026)
Anonim

ชื่อ

ld - ใช้ LD linker ของ GNU

สรุป

ld ตัวเลือก objfile …

รายละเอียด

LD รวมไฟล์และไฟล์ข้อมูลจำนวนมากย้ายข้อมูลและเชื่อมโยงข้อมูลอ้างอิงสัญลักษณ์ ขั้นตอนสุดท้ายในการรวบรวมโปรแกรมคือการเรียกใช้LD.

LD ยอมรับไฟล์ภาษาคำสั่งของ Linker ที่เขียนขึ้นในชุดคำสั่ง SQL Editor ของ AT & T Link เพื่อให้การควบคุมกระบวนการเชื่อมโยงอย่างชัดเจนและเป็นลายลักษณ์อักษร

หน้าคนนี้ไม่ได้อธิบายภาษาคำสั่ง; ดูLD ใน "info" หรือคู่มือ ld: linker GNU สำหรับรายละเอียดทั้งหมดเกี่ยวกับภาษาคำสั่งและด้านอื่น ๆ ของ linker ของ GNU

รุ่นนี้ของLD ใช้ไลบรารี BFD วัตถุประสงค์ทั่วไปเพื่อดำเนินการกับไฟล์อ็อบเจ็กต์ นี้ช่วยให้LD อ่าน, รวมและเขียนไฟล์อ็อบเจ็กต์ในรูปแบบที่แตกต่างกันหลายรูปแบบเช่น COFF หรือ "a.out" รูปแบบที่ต่างกันอาจเชื่อมโยงกันเพื่อสร้างไฟล์อ็อบเจ็กต์ที่มีอยู่

นอกเหนือจากความยืดหยุ่นของตัวเชื่อมโยง GNU จะเป็นประโยชน์มากกว่า linkers อื่น ๆ ในการให้ข้อมูลการวินิจฉัย หลาย linkers ละทิ้งการดำเนินการทันทีเมื่อพบข้อผิดพลาด; เมื่อใดก็ตามที่เป็นไปได้,LD (หรือในบางกรณีเพื่อให้ได้ไฟล์ที่ส่งออกแม้ว่าข้อผิดพลาดจะเกิดขึ้นก็ตาม)

ลิงเกอร์ GNULD หมายถึงการครอบคลุมช่วงกว้าง ๆ ของสถานการณ์และเพื่อให้มีความเข้ากันได้มากที่สุดเท่าที่จะเป็นไปได้กับผู้เชื่อมโยงอื่น ๆ เป็นผลให้คุณมีทางเลือกมากมายในการควบคุมพฤติกรรมของตน

ตัวเลือก

linker สนับสนุนมากมายเหลือเฟือของตัวเลือกบรรทัดคำสั่ง แต่ในทางปฏิบัติจริงไม่กี่ของพวกเขาจะใช้ในบริบทเฉพาะใด ๆ ตัวอย่างเช่นการใช้บ่อยๆLD คือการเชื่อมโยงไฟล์ยูนิกซ์มาตรฐานสำหรับมาตรฐานระบบ Unix ที่ได้รับการสนับสนุน ในระบบดังกล่าวให้เชื่อมโยงไฟล์ "hello.o":

ฉันทำ /lib/crt0.o hello.o -lc

นี้บอกLD เพื่อสร้างแฟ้มที่เรียกว่า เอาท์พุต เป็นผลจากการเชื่อมโยงไฟล์ "/lib/crt0.o" กับ "hello.o" และไลบรารี "libc.a" ซึ่งจะมาจากไดเร็กทอรีการค้นหามาตรฐาน (ดูการอภิปรายของ-l ตัวเลือกด้านล่าง)

บางส่วนของตัวเลือกบรรทัดคำสั่งเพื่อLD สามารถระบุได้ทุกจุดในบรรทัดคำสั่ง อย่างไรก็ตามตัวเลือกที่อ้างถึงไฟล์เช่น-l หรือ-Tทำให้ไฟล์ถูกอ่านที่จุดที่ตัวเลือกปรากฏในบรรทัดคำสั่งเทียบกับไฟล์อ็อบเจ็กต์และตัวเลือกไฟล์อื่น ๆ การทำซ้ำตัวเลือกที่ไม่ใช่ไฟล์ด้วยอาร์กิวเมนต์ที่แตกต่างกันจะไม่มีผลต่อหรือแทนที่การเกิดขึ้นก่อนหน้า (ซึ่งอยู่ทางด้านซ้ายบนบรรทัดคำสั่ง) ของตัวเลือกนั้น ตัวเลือกที่อาจมีการระบุอย่างมีนัยสำคัญมากกว่าหนึ่งครั้งจะระบุไว้ในคำอธิบายด้านล่าง

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

มักจะเชื่อมโยงกับไฟล์วัตถุอย่างน้อยหนึ่งไฟล์ แต่คุณสามารถระบุรูปแบบแฟ้มป้อนข้อมูลไบนารีแบบอื่น ๆ ได้โดยใช้-l, -Rและภาษาคำสั่งสคริปต์ ถ้า ไม่ ไฟล์อินพุตไบนารีที่ระบุไว้ทั้งหมด linker จะไม่สร้างผลลัพธ์ใด ๆ และจะแสดงข้อความไม่มีไฟล์ใส่.

หากลิงเกอร์ไม่รู้จักรูปแบบไฟล์อ็อบเจ็กต์จะถือว่าเป็นสคริปต์ linker สคริปต์ที่ระบุด้วยวิธีนี้จะเพิ่มสคริปต์ลิงเกอร์หลักที่ใช้สำหรับลิงก์ (ทั้งสคริปต์ตัวเชื่อมเริ่มต้นหรือสคริปต์ที่ระบุโดยใช้-T) คุณลักษณะนี้อนุญาตให้ linker เชื่อมโยงกับไฟล์ที่ดูเหมือนจะเป็นวัตถุหรือที่เก็บถาวร แต่ในความเป็นจริงเพียงกำหนดค่าสัญลักษณ์บางส่วนหรือใช้ "INPUT" หรือ "GROUP" เพื่อโหลดออบเจ็กต์อื่น โปรดทราบว่าการระบุสคริปต์ด้วยวิธีนี้จะช่วยเพิ่มสคริปต์ตัวเชื่อมหลักเท่านั้น ใช้-T เพื่อแทนที่สคริปต์ linker เริ่มต้นทั้งหมด

สำหรับตัวเลือกที่มีชื่อเป็นอักษรเดียวอาร์กิวเมนต์ตัวเลือกต้องเป็นไปตามตัวเลือกโดยไม่แทรกแซงช่องว่างหรือให้เป็นอาร์กิวเมนต์แยกต่างหากทันทีหลังจากตัวเลือกที่ต้องการ

สำหรับตัวเลือกที่มีชื่อหลายตัวอักษรหนึ่งขีดหรือสองคนสามารถนำหน้าชื่อตัวเลือก; ตัวอย่างเช่น,-trace สัญลักษณ์ และ--trace สัญลักษณ์ มีค่าเท่ากัน หมายเหตุ - มีข้อยกเว้นสำหรับกฎนี้ ตัวอักษรหลายตัวที่ขึ้นต้นด้วยตัวพิมพ์เล็ก 'o' สามารถทำได้ก่อนหน้าด้วยเครื่องหมายขีดกลางสองขีดเท่านั้น เพื่อลดความสับสนด้วย-o ตัวเลือก ตัวอย่างเช่น-omagic ตั้งชื่อไฟล์เอาต์พุตเป็นมายากล แต่ทว่า--omagic ตั้งค่าสถานะ NMAGIC ในเอาท์พุท

อาร์กิวเมนต์ให้กับตัวเลือกหลายตัวอักษรจะต้องถูกแยกออกจากชื่อตัวเลือกโดยใช้เครื่องหมายเท่ากับหรือให้เป็นอาร์กิวเมนต์ที่แยกกันโดยทันทีตามตัวเลือกที่ต้องการ ตัวอย่างเช่น,--trace-symbol foo และ--trace สัญลักษณ์ = foo มีค่าเท่ากัน ยอมรับตัวย่อที่ไม่ซ้ำของชื่อตัวเลือกหลายตัวอักษร

หมายเหตุ - หากมีการเรียกใช้ตัวเชื่อมโยงทางอ้อมโดยใช้โปรแกรมควบคุมคอมไพเลอร์ (เช่นGCC) แล้วตัวเลือกบรรทัดคำสั่ง linker ทั้งหมดควรมีคำนำหน้าด้วย-Wl, (หรือสิ่งที่เหมาะสมสำหรับโปรแกรมควบคุมคอมไพเลอร์เฉพาะ) เช่นนี้:

gcc -Wl, - startgroup foo.o bar.o -Wl, - endgroup

นี่เป็นสิ่งสำคัญเพราะมิฉะนั้นโปรแกรมควบคุมคอมไพเลอร์อาจปิดตัวเลือก linker โดยอัตโนมัติส่งผลให้เกิดลิงก์ที่ไม่ถูกต้อง

นี่คือตารางของสวิทช์บรรทัดคำสั่งทั่วไปที่ได้รับการยอมรับโดย linker GNU:

-a คำหลัก

ตัวเลือกนี้รองรับการทำงานร่วมกับ HP / UX คำหลัก อาร์กิวเมนต์ต้องเป็นสตริงเก็บ, ที่ใช้ร่วมกัน, หรือค่าเริ่มต้น. -aarchive เป็นฟังก์ชันเทียบเท่า-Bstaticและอีกสองคำมีฟังก์ชันเทียบเท่าได้-Bdynamic. ตัวเลือกนี้สามารถใช้ได้หลายครั้ง

-A สถาปัตยกรรม

--architecture = สถาปัตยกรรม

ในรุ่นปัจจุบันของLDตัวเลือกนี้มีประโยชน์สำหรับสถาปัตยกรรมตระกูล Intel 960 เท่านั้น ในนั้นLD การตั้งค่า สถาปัตยกรรม อาร์กิวเมนต์ระบุสถาปัตยกรรมเฉพาะในตระกูล 960 ทำให้สามารถป้องกันและปรับเปลี่ยนเส้นทางการค้นหาไลบรารีไลบรารีได้

รุ่นอนาคตของLD อาจสนับสนุนการทำงานที่คล้ายกันสำหรับครอบครัวสถาปัตยกรรมอื่น ๆ

-b การป้อนข้อมูลรูปแบบ

--format = การป้อนข้อมูลรูปแบบ

LD อาจได้รับการกำหนดค่าให้สนับสนุนไฟล์อ็อบเจ็กต์มากกว่าหนึ่งชนิด ถ้าคุณLD มีการกำหนดค่าด้วยวิธีนี้คุณสามารถใช้-b เพื่อระบุรูปแบบไบนารีสำหรับไฟล์อ็อบเจ็กต์อินพุทที่ทำตามตัวเลือกนี้ในบรรทัดคำสั่ง แม้กระทั่งเมื่อLD มีการกำหนดค่าให้สนับสนุนรูปแบบอ็อบเจ็กต์ทางเลือกคุณไม่จำเป็นต้องระบุค่านี้เป็นอย่างอื่นLD ควรได้รับการกำหนดค่าให้คาดหวังว่าเป็นรูปแบบการป้อนข้อมูลเริ่มต้นรูปแบบปกติที่สุดในแต่ละเครื่อง การป้อนข้อมูลรูปแบบ คือสตริงข้อความชื่อของรูปแบบเฉพาะที่ไลบรารี BFD สนับสนุน (คุณสามารถระบุรูปแบบไบนารีที่พร้อมใช้งานได้ด้วย)objdump -i.)

คุณอาจต้องการใช้ตัวเลือกนี้หากคุณกำลังเชื่อมโยงไฟล์ด้วยรูปแบบไบนารีผิดปกติ คุณยังสามารถใช้-b เพื่อสลับรูปแบบอย่างชัดเจน (เมื่อเชื่อมโยงไฟล์อ็อบเจ็กต์ของรูปแบบต่างๆ) โดยรวม-b การป้อนข้อมูลรูปแบบ ก่อนแต่ละกลุ่มของไฟล์อ็อบเจ็กต์ในรูปแบบใดรูปแบบหนึ่ง

รูปแบบเริ่มต้นมาจากตัวแปรสภาพแวดล้อม "GNUTARGET"

นอกจากนี้คุณยังสามารถกำหนดรูปแบบการป้อนข้อมูลจากสคริปต์โดยใช้คำสั่ง "TARGET";

-c MRI-commandfile

--mri สคริปต์ = MRI-commandfile

สำหรับความเข้ากันได้กับ linkers ผลิตโดย MRI,LD ยอมรับไฟล์สคริปต์ที่เขียนขึ้นในภาษาคำสั่งสำรองและแบบ จำกัด ที่อธิบายไว้ในส่วนไฟล์สคริปต์ที่ใช้ร่วมกับ MRI ได้จากเอกสาร GNU ld แนะนำไฟล์สคริปต์ MRI ด้วยตัวเลือก-c; ใช้-T ตัวเลือกในการเรียกใช้สคริปต์ linker ที่เขียนขึ้นโดยทั่วไปLD ภาษาสคริปต์ ถ้า MRI-cmdfile ไม่ได้อยู่,LDมองหามันในไดเรกทอรีที่ระบุโดย-L ตัวเลือก.

-d

-กระแสตรง

-dp

ทั้งสามตัวเลือกมีค่าเท่ากัน หลายรูปแบบได้รับการสนับสนุนสำหรับความเข้ากันได้กับ linkers อื่น ๆ พวกเขากำหนดพื้นที่ให้กับสัญลักษณ์ทั่วไปแม้ว่าจะมีการระบุไฟล์ที่ส่งคืน relocatable (ด้วย-r) คำสั่งสคริปต์ "FORCE_COMMON_ALLOCATION" มีผลเช่นเดียวกัน

-e การเข้า

--entry = การเข้า

ใช้ การเข้า เป็นสัญลักษณ์ที่ชัดเจนสำหรับการเริ่มต้นการทำงานของโปรแกรมแทนที่จะเป็นจุดเข้าเริ่มต้น หากไม่มีชื่อสัญลักษณ์ การเข้า ตัวเชื่อมโยงจะพยายามแยกวิเคราะห์ การเข้า เป็นตัวเลขและใช้เป็นที่อยู่ในรายการ (หมายเลขจะถูกตีความในฐาน 10 คุณอาจใช้ผู้นำ0x สำหรับฐาน 16 หรือชั้นนำ0 สำหรับฐาน 8)

-E

--export ไดนามิก

เมื่อสร้างไดเร็กทอรีที่มีการเชื่อมโยงแบบไดนามิกให้เพิ่มสัญลักษณ์ทั้งหมดลงในตารางสัญลักษณ์แบบไดนามิก ตารางสัญลักษณ์แบบไดนามิกคือชุดของสัญลักษณ์ที่สามารถมองเห็นได้จากวัตถุพลวัตในขณะดำเนินการ

ถ้าคุณไม่ได้ใช้ตัวเลือกนี้ตารางสัญลักษณ์แบบไดนามิกจะมีเฉพาะสัญลักษณ์ที่อ้างอิงโดยวัตถุพลวัตบางอย่างที่กล่าวถึงในลิงก์

ถ้าคุณใช้ "dlopen" เพื่อโหลดอ็อบเจ็กต์แบบไดนามิกที่ต้องการอ้างอิงกลับไปยังสัญลักษณ์ที่โปรแกรมกำหนดไว้แทนที่จะเป็นวัตถุไดนามิกอื่น ๆ คุณอาจจำเป็นต้องใช้ตัวเลือกนี้เมื่อเชื่อมโยงโปรแกรมด้วยตนเอง

นอกจากนี้คุณยังสามารถใช้สคริปต์รุ่นเพื่อควบคุมสิ่งที่ควรเพิ่มสัญลักษณ์ลงในตารางสัญลักษณ์ไดนามิกหากรูปแบบเอาต์พุตสนับสนุน ดูรายละเอียดของ--version สคริปต์ ใน @ เตะ {VERSION}

-EB

เชื่อมโยงวัตถุ big-endian ซึ่งจะส่งผลต่อรูปแบบการแสดงผลเริ่มต้น

-EL

เชื่อมโยงออบเจกต์ little-endian ซึ่งจะส่งผลต่อรูปแบบการแสดงผลเริ่มต้น

-f

--auxiliary ชื่อ

เมื่อสร้างออบเจกต์ที่ใช้ร่วมกันของ ELF ให้ตั้งค่าฟิลด์ DT_AUXILIARY ภายในเป็นชื่อที่ระบุ นี้จะบอก linker แบบไดนามิกที่ตารางสัญลักษณ์ของวัตถุที่ใช้ร่วมกันควรใช้เป็นตัวกรองเสริมบนตารางสัญลักษณ์ของวัตถุที่ใช้ร่วมกัน ชื่อ .

ถ้าคุณเชื่อมโยงโปรแกรมกับวัตถุตัวกรองนี้หลังจากนั้นเมื่อคุณเรียกใช้โปรแกรมตัวเชื่อมแบบไดนามิกจะเห็นฟิลด์ DT_AUXILIARY ถ้าตัวเชื่อมโยงแบบไดนามิกช่วยแก้ไขสัญลักษณ์ใด ๆ จากออบเจ็กต์ตัวกรองก่อนอื่นจะตรวจสอบว่ามีคำจำกัดความในออบเจกต์ที่ใช้ร่วมกันหรือไม่ ชื่อ . ถ้ามีอยู่ก็จะใช้แทนคำนิยามในตัวกรอง วัตถุที่ใช้ร่วมกัน ชื่อ ไม่จำเป็นต้องมีอยู่ ดังนั้นวัตถุที่ใช้ร่วมกัน ชื่อ อาจถูกนำมาใช้เพื่อให้สามารถใช้งานฟังก์ชั่นบางอย่างได้อีกทางเลือกหนึ่งอาจจะเป็นการแก้จุดบกพร่องหรือเพื่อประสิทธิภาพเฉพาะของเครื่อง

ตัวเลือกนี้อาจถูกระบุมากกว่าหนึ่งครั้ง รายการ DT_AUXILIARY จะถูกสร้างขึ้นตามลำดับที่ปรากฏในบรรทัดคำสั่ง

-F ชื่อ

--กรอง ชื่อ

เมื่อสร้างออบเจกต์ที่ใช้ร่วมกันของ ELF ให้ตั้งค่าฟิลด์ DT_FILTER ภายในเป็นชื่อที่ระบุ นี้จะบอก linker แบบไดนามิกที่ตารางสัญลักษณ์ของวัตถุที่ใช้ร่วมกันที่กำลังสร้างขึ้นควรใช้เป็นตัวกรองในตารางสัญลักษณ์ของวัตถุที่ใช้ร่วมกัน ชื่อ .

ถ้าคุณเชื่อมโยงโปรแกรมกับวัตถุตัวกรองนี้ภายหลังจากนั้นเมื่อคุณเรียกใช้โปรแกรมตัวเชื่อมแบบไดนามิกจะเห็นฟิลด์ DT_FILTER ตัวเชื่อมต่อแบบไดนามิกจะแก้ไขสัญลักษณ์ตามตารางสัญลักษณ์ของตัวกรองตามปกติ แต่จะเชื่อมโยงกับคำจำกัดความที่พบในวัตถุที่ใช้ร่วมกัน ชื่อ . ดังนั้นวัตถุตัวกรองสามารถใช้เพื่อเลือกชุดย่อยของสัญลักษณ์ที่มีให้โดยวัตถุ ชื่อ .

ผู้ลิงก์เก่าบางคนใช้-F ตัวเลือกในการรวบรวม toolchain สำหรับการระบุรูปแบบไฟล์อ็อบเจ็กต์สำหรับทั้งไฟล์อินพุตและเอาต์พุต ลิงเกอร์ GNU ใช้กลไกอื่น ๆ เพื่อการนี้:-b, --format, --oformat ตัวเลือก "คำสั่ง" ในสคริปต์ linker และตัวแปรสภาพแวดล้อม "GNUTGGET" ลิงเกอร์ GNU จะไม่สนใจ-F เมื่อไม่สร้างวัตถุที่ใช้ร่วมกัน ELF

-fini ชื่อ

เมื่อสร้างเอลฟ์หรือวัตถุที่ใช้ร่วมกันให้เรียก NAME เมื่อปฏิบัติการหรือวัตถุที่ใช้ร่วมกันถูกยกเลิกการโหลดโดยการตั้งค่า DT_FINI ไปยังที่อยู่ของฟังก์ชัน โดยค่าเริ่มต้น linker จะใช้ "_fini" เป็นฟังก์ชันในการโทร

-G

ละเว้น มีไว้เพื่อให้เข้ากันได้กับเครื่องมืออื่น ๆ

-G ราคา

--gpsize = ราคา

กำหนดขนาดสูงสุดของวัตถุที่จะปรับใช้โดยใช้ GP register to ขนาด . นี่เป็นเพียงความหมายสำหรับรูปแบบไฟล์อ็อบเจ็กต์เช่น MIPS ECOFF ซึ่งรองรับการวางวัตถุขนาดใหญ่และเล็กลงในส่วนต่างๆ นี้จะถูกละเว้นสำหรับรูปแบบไฟล์วัตถุอื่น ๆ

-h ชื่อ

-soname = ชื่อ

เมื่อสร้างออบเจกต์ที่ใช้ร่วมกันของ ELF ให้ตั้งค่าฟิลด์ DT_SONAME ภายในเป็นชื่อที่ระบุ เมื่อปฏิบัติการถูกเชื่อมโยงกับวัตถุที่ใช้ร่วมกันซึ่งมีฟิลด์ DT_SONAME จากนั้นเมื่อรันโปรแกรมเรียกใช้ตัวเชื่อมแบบไดนามิกจะพยายามโหลดอ็อบเจ็กต์ที่ระบุโดยฟิลด์ DT_SONAME แทนการใช้ชื่อไฟล์ที่กำหนดให้กับลิงเกอร์

-ผม

ทำลิงก์ที่เพิ่มขึ้น (เช่นเดียวกับตัวเลือก-r).

-ในนั้น ชื่อ

เมื่อสร้างเอลฟ์หรือวัตถุที่ใช้ร่วมกันให้เรียก NAME เมื่อปฏิบัติการหรือวัตถุที่ใช้ร่วมกันถูกโหลดโดยการตั้งค่า DT_INIT เป็นที่อยู่ของฟังก์ชัน โดยค่าเริ่มต้น linker จะใช้ "_init" เป็นฟังก์ชันในการโทร

-l เก็บ

--library = เก็บ

เพิ่มไฟล์เก็บถาวร เก็บ ในรายการไฟล์ที่จะเชื่อมโยง ตัวเลือกนี้สามารถใช้ได้หลายครั้งLD จะค้นหาเส้นทางของรายการสำหรับการเกิด "libarchive.a" สำหรับทุกๆ เก็บ ที่ระบุ

ในระบบที่สนับสนุน shared library,LD นอกจากนี้ยังสามารถค้นหาไลบรารีที่มีนามสกุลอื่น ".a" โดยเฉพาะอย่างยิ่งในระบบ ELF และ SunOS,LD จะค้นหาไดเรกทอรีสำหรับไลบรารีที่มีส่วนขยายของ ".so" ก่อนค้นหาไฟล์ที่มีนามสกุลเป็น ".a" ตามข้อตกลงส่วนขยาย ".so" จะระบุไลบรารีที่ใช้ร่วมกัน

linker จะค้นหาที่เก็บถาวรเพียงครั้งเดียวเท่านั้นที่ตำแหน่งที่ระบุไว้ในบรรทัดคำสั่ง ถ้าที่เก็บถาวรกำหนดสัญลักษณ์ที่ไม่ได้ระบุไว้ในบางออบเจ็กต์ที่ปรากฏขึ้นก่อนที่จะเก็บข้อมูลในบรรทัดคำสั่งตัวเชื่อมโยงจะมีไฟล์ที่เหมาะสมจากที่จัดเก็บ อย่างไรก็ตามสัญลักษณ์ที่ไม่ได้กำหนดไว้ในวัตถุที่ปรากฏในภายหลังในบรรทัดคำสั่งจะไม่ทำให้ตัวเชื่อมโยงค้นหาข้อมูลที่เก็บถาวรอีกครั้ง

ดู-( ตัวเลือกสำหรับวิธีการบังคับให้ตัวเชื่อมโยงไปยังการค้นหาที่เก็บหลาย ๆ ครั้ง

คุณสามารถแสดงที่เก็บเดียวกันหลายครั้งในบรรทัดคำสั่ง

การค้นหาแบบถาวรนี้เป็นมาตรฐานสำหรับลิงเกอร์ของ Unix อย่างไรก็ตามหากคุณใช้LD onAIX โปรดทราบว่าจะแตกต่างจากลักษณะการทำงานของ linker AIX

-L searchdir

--library เส้นทาง = searchdir

เพิ่มเส้นทาง searchdir ไปยังรายการเส้นทางที่LD จะค้นหาไลบรารีที่เก็บถาวรและLD สคริปต์ควบคุม คุณสามารถใช้ตัวเลือกนี้ได้หลายครั้ง ไดเรกทอรีจะค้นหาตามลำดับที่ระบุไว้ในบรรทัดคำสั่ง ไดเรกทอรีที่ระบุในบรรทัดคำสั่งจะค้นหาก่อนไดเรกทอรีเริ่มต้น ทั้งหมด-L ตัวเลือกจะมีผลกับทุกคน-l โดยไม่คำนึงถึงลำดับที่ตัวเลือกปรากฏ

ถ้า searchdir เริ่มต้นด้วย "=" แล้ว "=" จะถูกแทนที่ด้วยเครื่องหมาย "." sysroot prefix เส้นทางที่ระบุเมื่อมีการกำหนดค่า linker

ชุดเส้นทางเริ่มต้นที่ค้นหา (โดยไม่ต้องระบุด้วย-L) ขึ้นอยู่กับโหมดการเลียนแบบใดLD ใช้และในบางกรณียังเกี่ยวกับวิธีการกำหนดค่า

เส้นทางสามารถระบุได้ในสคริปต์ลิงก์ด้วยคำสั่ง "SEARCH_DIR" ไดเรกทอรีที่ระบุด้วยวิธีนี้จะค้นหาที่จุดที่สคริปต์ตัวเชื่อมโยงปรากฏในบรรทัดคำสั่ง

-m การแข่งขัน

เลียนแบบ การแข่งขัน ลิงเกอร์ คุณสามารถแสดงรายการ emulations ที่มีอยู่ด้วย--verbose หรือ-Vตัวเลือก.

ถ้า-m ไม่ได้ใช้การจำลองจะถูกนำมาจากตัวแปรสภาพแวดล้อม "LDEMULATION" หากมีการกำหนดไว้

มิฉะนั้นการจำลองเริ่มต้นจะขึ้นอยู่กับการกำหนดค่าตัวเชื่อมโยง

-M

--print แผนที่

พิมพ์แผนที่เชื่อมโยงไปยังเอาต์พุตมาตรฐาน แผนที่การเชื่อมโยงแสดงข้อมูลเกี่ยวกับการเชื่อมโยงรวมถึงสิ่งต่อไปนี้:

*

ตำแหน่งไฟล์และสัญลักษณ์ของวัตถุจะถูกแม็พเข้าในหน่วยความจำ

*

สัญลักษณ์ที่ใช้กันทั่วไปได้รับการจัดสรรอย่างไร

*

สมาชิกเก็บถาวรทั้งหมดที่รวมอยู่ในลิงก์โดยกล่าวถึงสัญลักษณ์ที่ทำให้สมาชิกถาวรถูกนำเข้ามา

-n

--nmagic

ปิดการจัดตำแหน่งส่วนของหน้าและทำเครื่องหมายเอาต์พุตเป็น "NMAGIC" ถ้าเป็นไปได้

-N

--omagic

ตั้งส่วนข้อความและข้อมูลให้สามารถอ่านได้และเขียนได้ นอกจากนี้อย่าวางหน้าส่วนข้อมูลและปิดการเชื่อมโยงกับไลบรารีที่ใช้ร่วมกัน หากรูปแบบเอาต์พุตสนับสนุนตัวเลขเวทมนตร์แบบ Unix ให้ทำเครื่องหมายผลลัพธ์เป็น "OMAGIC"

--no-omagic

ตัวเลือกนี้จะลบล้างผลกระทบส่วนใหญ่ของ-N ตัวเลือก กำหนดส่วนข้อความให้เป็นแบบอ่านอย่างเดียวและบังคับให้ส่วนข้อมูลเป็นแนวหน้า หมายเหตุ - ตัวเลือกนี้ไม่ได้เปิดใช้งานการเชื่อมโยงกับไลบรารีที่ใช้ร่วมกัน ใช้-Bdynamic สำหรับสิ่งนี้.

-o เอาท์พุต

--output = เอาท์พุต

ใช้ เอาท์พุต เป็นชื่อของโปรแกรมที่ผลิตโดยLD; หากไม่ได้ระบุตัวเลือกนี้ชื่อ a.out ใช้เป็นค่าเริ่มต้น คำสั่งสคริปต์ "OUTPUT" ยังสามารถระบุชื่อไฟล์ที่ส่งออก

-O ชั้น

ถ้า ชั้น เป็นค่าตัวเลขที่มากกว่าศูนย์LD เพิ่มประสิทธิภาพเอาท์พุท การดำเนินการนี้อาจใช้เวลานานกว่าปกติและอาจใช้เฉพาะไบนารีสุดท้ายเท่านั้น

-q

--emit-relocs

ออกจากส่วนการย้ายและเนื้อหาใน exececutables ที่มีการเชื่อมโยงอย่างเต็มที่ เครื่องมือวิเคราะห์การโพสต์ลิงก์และเครื่องมือเพิ่มประสิทธิภาพอาจต้องใช้ข้อมูลนี้เพื่อทำการแก้ไขไฟล์ปฏิบัติการที่ถูกต้อง ซึ่งส่งผลให้เกิดไฟล์ปฏิบัติการขนาดใหญ่ขึ้น

ขณะนี้ตัวเลือกนี้ใช้ได้กับแพลตฟอร์ม ELF เท่านั้น

-r

--relocateable

สร้างการแสดงผลที่ relocatable --- เช่นสร้างไฟล์ที่ส่งออกซึ่งสามารถนำมาใช้เป็นอินพุตได้LD. นี้มักจะเรียกว่า การเชื่อมโยงบางส่วน . ในฐานะที่เป็นผลข้างเคียงในสภาพแวดล้อมที่สนับสนุนตัวเลขมายากล Unix มาตรฐานตัวเลือกนี้จะกำหนดจำนวนมายากลของไฟล์ที่ส่งออกเป็น "OMAGIC" หากไม่มีการระบุตัวเลือกนี้จะมีการสร้างไฟล์แบบสัมบูรณ์ เมื่อเชื่อมโยง C + + โปรแกรมตัวเลือกนี้ จะไม่ แก้ไขการอ้างอิงถึง constructors การทำเช่นนั้นใช้-Ur.

เมื่อไฟล์อินพุตไม่มีรูปแบบเช่นเดียวกับไฟล์ที่ส่งออกการเชื่อมโยงบางส่วนจะได้รับการสนับสนุนหากไฟล์อินพุตนั้นไม่มีการโยกย้าย รูปแบบการแสดงผลที่แตกต่างกันสามารถมีข้อ จำกัด เพิ่มเติม ตัวอย่างเช่นบางรูปแบบ "a.out" ไม่สนับสนุนการเชื่อมโยงบางส่วนกับไฟล์อินพุตในรูปแบบอื่น ๆ เลย

ตัวเลือกนี้ทำสิ่งเดียวกับ-ผม.

-R ชื่อไฟล์

--just สัญลักษณ์ = ชื่อไฟล์

อ่านชื่อสัญลักษณ์และที่อยู่ของพวกเขาจาก ชื่อไฟล์ แต่อย่าย้ายหรือรวมไว้ในเอาท์พุท นี้จะช่วยให้ไฟล์ที่ส่งออกของคุณเพื่ออ้างถึงสัญลักษณ์ไปยังตำแหน่งที่แน่นอนของหน่วยความจำที่กำหนดไว้ในโปรแกรมอื่น ๆ คุณสามารถใช้ตัวเลือกนี้ได้มากกว่าหนึ่งครั้ง

สำหรับความเข้ากันได้กับตัวเชื่อม ELF อื่น ๆ ถ้า-R ตามด้วยชื่อไดเรกทอรีแทนที่จะเป็นชื่อไฟล์จะถือว่าเป็น-rpath ตัวเลือก

-s

--strip ทั้งหมด

ละเว้นข้อมูลสัญลักษณ์ทั้งหมดจากไฟล์ที่ส่งออก

-S

--strip-การแก้ปัญหา

ละเว้นข้อมูลสัญลักษณ์ดีบักเกอร์ (แต่ไม่ใช่สัญลักษณ์ทั้งหมด) จากไฟล์ที่ส่งออก

t-

--ติดตาม

พิมพ์ชื่อของไฟล์อินพุทเป็นLD ประมวลผลพวกเขา

-T scriptfile

--script = scriptfile

ใช้ scriptfile เป็นสคริปต์ linker สคริปต์นี้จะแทนที่LD's linker script เริ่มต้น (แทนที่จะเพิ่มไป) ดังนั้น commandfile ต้องระบุทุกอย่างที่จำเป็นเพื่ออธิบายไฟล์ที่ส่งออก ถ้า scriptfile ไม่มีอยู่ในไดเรกทอรีปัจจุบัน "ld" จะค้นหาไฟล์ดังกล่าวในไดเร็กทอรีที่ระบุไว้ก่อนหน้านี้-L ตัวเลือก. หลายอย่าง-T ตัวเลือกสะสม

-ยู สัญลักษณ์

--undefined = สัญลักษณ์

บังคับ สัญลักษณ์ จะถูกใสในไฟลเอาตพุตเปนสัญลักษณที่ไมไดกําหนด การทำเช่นนี้อาจทำให้เกิดการเชื่อมโยงโมดูลเพิ่มเติมจากไลบรารีมาตรฐาน-ยู อาจจะซ้ำกับอาร์กิวเมนต์ตัวเลือกที่แตกต่างกันเพื่อป้อนสัญลักษณ์ที่ไม่ได้ระบุเพิ่มเติม ตัวเลือกนี้เทียบเท่ากับคำสั่งสคริปต์ linker "EXTERN"

-Ur

สำหรับโปรแกรมอื่นนอกเหนือจากโปรแกรม C ++ ตัวเลือกนี้จะเทียบเท่ากับ-r: จะสร้างเอาท์พุท relocatable --- เช่นไฟล์ที่ส่งออกซึ่งสามารถนำมาใช้เป็นอินพุตได้LD. เมื่อเชื่อมโยงโปรแกรม C ++,-Ur ทำ แก้ไขการอ้างอิงไปยัง constructor ไม่เหมือนกัน-r. ไม่ใช้งาน-Ur เกี่ยวกับไฟล์ที่ถูกเชื่อมโยงด้วย-Ur; เมื่อสร้างตารางตัวสร้างแล้วจะไม่สามารถเพิ่มได้ ใช้-Ur เฉพาะส่วนสุดท้ายที่ผ่านมาและ-r สำหรับคนอื่น ๆ

--unique = มาตรา

สร้างส่วนเอาท์พุทแยกกันสำหรับทุกส่วนการป้อนข้อมูลที่ตรงกัน มาตรา หรือหากใช้สัญลักษณ์เสริม มาตรา อาร์กิวเมนต์หายไปสำหรับทุกส่วนของการป้อนข้อมูลสำหรับเด็กกำพร้า ส่วนเด็กกำพร้าเป็นส่วนที่ไม่ได้กล่าวถึงเฉพาะในสคริปต์ linker คุณสามารถใช้ตัวเลือกนี้หลายครั้งในบรรทัดคำสั่ง; จะป้องกันไม่ให้เกิดการรวมกันของส่วนอินพุทที่มีชื่อเหมือนกันการส่งส่วนเอาท์พุตที่เอาชนะในสคริปต์ linker

-v

--version

-V

แสดงหมายเลขเวอร์ชันสำหรับLD.-V นอกจากนี้ยังมีรายการจำลองที่ได้รับการสนับสนุน

-x

--discard ทั้งหมด

ลบสัญลักษณ์ในเครื่องทั้งหมด

-X

--discard-ชาวบ้าน

ลบสัญลักษณ์ท้องถิ่นชั่วคราวทั้งหมด สำหรับเป้าหมายส่วนใหญ่นี่คือสัญลักษณ์ท้องถิ่นทั้งหมดที่มีชื่อขึ้นต้นด้วยL.

-y สัญลักษณ์

--trace สัญลักษณ์ = สัญลักษณ์

พิมพ์ชื่อของไฟล์ที่เชื่อมโยงแต่ละไฟล์ สัญลักษณ์ ปรากฏ ตัวเลือกนี้อาจได้รับหลายครั้ง ในหลายระบบมีความจำเป็นที่จะต้องใส่เครื่องหมายขีดล่างก่อน

ตัวเลือกนี้มีประโยชน์เมื่อคุณมีสัญลักษณ์ที่ไม่ได้กำหนดไว้ในลิงก์ของคุณ แต่ไม่ทราบว่าการอ้างอิงมาจากที่ใด

-Y เส้นทาง

เพิ่ม เส้นทาง ไปยังพา ธ การค้นหาไลบรารีเริ่มต้น ตัวเลือกนี้มีอยู่สำหรับความเข้ากันได้ของ Solaris

-z คำหลัก

คำหลักที่รู้จักคือ "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" และ "nocopyreloc " คำหลักอื่นจะถูกละเว้นสำหรับความเข้ากันได้ของ Solaris "initfirst" ทำเครื่องหมายวัตถุที่จะถูกเตรียมใช้งานก่อนเมื่อรันไทม์ก่อนวัตถุอื่น ๆinterpose เครื่องหมายวัตถุที่ตารางสัญลักษณ์ของ interposes ก่อนสัญลักษณ์ทั้งหมด แต่ปฏิบัติการหลัก loadfltr เครื่องหมายวัตถุที่ filtees ของการประมวลผลได้ทันทีที่รันไทม์ nodefaultlib เครื่องหมายวัตถุที่ค้นหา dependencies ของวัตถุนี้จะไม่สนใจ เส้นทางการค้นหาไลบรารีเริ่มต้น "nodelete" ทำเครื่องหมายว่าไม่ควรยกเลิกการโหลดวัตถุเมื่อรันไทม์ "nodlopen" หมายถึงวัตถุที่ไม่สามารถใช้ได้กับ "dlopen" "nodump" ทำเครื่องหมายว่าวัตถุไม่สามารถถูกทิ้งโดย "dldump" ได้ "ตอนนี้" เครื่องหมายวัตถุที่มีการเชื่อมโยงรันไทม์ที่ไม่เป็นอันตราย "ต้นทาง" ทำเครื่องหมายว่าวัตถุนี้อาจมี ORIGIN "defs" ไม่อนุญาตให้ใช้สัญลักษณ์ที่ไม่ได้ระบุไว้ "muldefs" ใช้คำจำกัดความหลายคำ "combreloc" รวมหลายส่วน reloc และเรียงลำดับเพื่อทำให้การค้นหาแคชแบบไดนามิกแคชเป็นไปได้

"nocombreloc" ปิดใช้งานส่วน reloc หลายส่วนที่รวมกัน "nocopyreloc" ปิดใช้งานการผลิตสำเนา relocs

-( หอจดหมายเหตุ -)

--start กลุ่ม หอจดหมายเหตุ --end กลุ่ม

หอจดหมายเหตุ ควรเป็นรายการไฟล์ที่เก็บถาวร อาจเป็นชื่อไฟล์ที่ชัดเจนหรือ-lตัวเลือก.

ที่เก็บที่ระบุจะถูกค้นหาซ้ำจนกว่าจะมีการสร้างการอ้างอิงที่ไม่ได้กำหนดไว้ใหม่ โดยปกติแล้วที่เก็บถาวรจะถูกค้นหาเพียงครั้งเดียวตามลำดับที่ระบุไว้ในบรรทัดคำสั่ง ถ้าสัญลักษณ์ในที่เก็บถาวรเป็นสิ่งจำเป็นสำหรับการแก้ไขสัญลักษณ์ที่ไม่ได้กำหนดซึ่งอ้างถึงโดยวัตถุในคลังข้อมูลที่ปรากฏขึ้นในภายหลังในบรรทัดคำสั่งตัวเชื่อมโยงจะไม่สามารถแก้ไขการอ้างอิงนั้นได้ โดยการจัดกลุ่มที่เก็บข้อมูลพวกเขาทั้งหมดจะถูกค้นหาซ้ำ ๆ จนกว่าการอ้างอิงทั้งหมดจะได้รับการแก้ไข

การใช้ตัวเลือกนี้มีค่าประสิทธิภาพที่สำคัญ ที่ดีที่สุดคือใช้เฉพาะเมื่อมีการอ้างอิงแบบวงกลมที่หลีกเลี่ยงไม่ได้ระหว่างที่เก็บถาวรตั้งแต่สองไฟล์ขึ้นไป

--accept ไม่รู้จักอินพุตโค้ง

--no-ยอมรับไม่รู้จักอินพุตโค้ง

บอก linker เพื่อยอมรับ input files ซึ่งไม่รู้จักสถาปัตยกรรม สมมติฐานคือผู้ใช้รู้ว่ากำลังทำอะไรอยู่และจงใจต้องการเชื่อมโยงไฟล์เหล่านี้ที่ไม่รู้จัก นี่คือลักษณะการทำงานเริ่มต้นของลิงเกอร์ก่อนที่จะปล่อย 2.14 พฤติกรรมเริ่มต้นจากการเปิดตัว 2.14 เป็นต้นไปคือการปฏิเสธไฟล์อินพุตดังกล่าว--accept ไม่รู้จักอินพุตโค้ง ถูกเพิ่มเพื่อเรียกคืนลักษณะการทำงานเดิม

-ยืนยัน คำหลัก

ตัวเลือกนี้ถูกละเว้นสำหรับความเข้ากันได้ของ SunOS

-Bdynamic

-dy

-call_shared

ลิงก์กับไลบรารีแบบไดนามิก นี่มีความหมายเฉพาะบนแพลตฟอร์มที่ได้รับการสนับสนุนห้องสมุดสาธารณะ ตัวเลือกนี้เป็นค่าเริ่มต้นบนแพลตฟอร์มดังกล่าว ตัวแปรต่างๆของตัวเลือกนี้มีไว้สำหรับเข้ากันได้กับระบบต่างๆ คุณสามารถใช้ตัวเลือกนี้หลายครั้งในบรรทัดคำสั่ง: มันมีผลต่อการค้นหาห้องสมุด-l ตัวเลือกที่ทำตาม

-Bgroup

ตั้งค่าสถานะ "DF_1_GROUP" ในรายการ "DT_FLAGS_1" ในส่วนแบบไดนามิก ซึ่งทำให้รันไทม์รันไทม์เชื่อมโยงกับ lookups ในอ็อบเจ็กต์นี้และการอ้างอิงที่จะดำเนินการภายในกลุ่มเท่านั้น--no-ที่ไม่ได้กำหนด โดยนัย ตัวเลือกนี้มีความหมายเฉพาะบนแพลตฟอร์ม ELF ที่สนับสนุนห้องสมุดสาธารณะ

-Bstatic

-dn

-non_shared

-คงที่

อย่าเชื่อมโยงกับ shared library นี่มีความหมายเฉพาะบนแพลตฟอร์มที่ได้รับการสนับสนุนห้องสมุดสาธารณะ ตัวแปรต่างๆของตัวเลือกนี้มีไว้สำหรับเข้ากันได้กับระบบต่างๆ คุณสามารถใช้ตัวเลือกนี้หลายครั้งในบรรทัดคำสั่ง: มันมีผลต่อการค้นหาห้องสมุด-l ตัวเลือกที่ทำตาม

-Bsymbolic

เมื่อสร้างไลบรารีที่ใช้ร่วมกันให้ผูกการอ้างอิงถึงสัญลักษณ์สากลไปยังคำจำกัดความภายในไลบรารีที่ใช้ร่วมกันถ้ามี โดยปกติแล้วโปรแกรมที่เชื่อมโยงกับไลบรารีที่ใช้ร่วมกันสามารถแทนที่คำจำกัดความภายในไลบรารีที่ใช้ร่วมกันได้ ตัวเลือกนี้มีความหมายเฉพาะบน ELFplatforms ที่สนับสนุนไลบรารีที่ใช้ร่วมกัน

--check ส่วน

ส่วน --no-ตรวจสอบ

ขอลิงค์เกอร์ ไม่ เพื่อตรวจสอบที่อยู่ส่วนหลังได้รับมอบหมายเพื่อดูว่ามีการซ้อนทับหรือไม่ โดยปกติลิงเกอร์จะทำการตรวจสอบนี้และหากพบว่ามีการทับซ้อนกันจะทำให้เกิดข้อผิดพลาดที่เหมาะสม linker ทราบเกี่ยวกับและไม่ให้เบี้ยเลี้ยงสำหรับส่วนในการซ้อนทับ พฤติกรรมเริ่มต้นสามารถเรียกคืนโดยใช้สวิตช์บรรทัดคำสั่ง--check ส่วน.

--cref

ส่งออกตารางอ้างอิงแบบไขว้ หากมีการสร้างไฟล์แผนที่เกอร์เกอร์ตารางอ้างอิงจะถูกพิมพ์ลงในไฟล์แผนที่ มิฉะนั้นจะพิมพ์บนเอาต์พุตมาตรฐาน

รูปแบบของตารางมีความตั้งใจโดยเจตนาเพื่อให้สามารถประมวลผลได้ง่ายโดยใช้สคริปต์ถ้าจำเป็น ส