คำถามติดแท็ก dynamic-linking

18
ควรใช้ไลบรารีแบบไดนามิกและแบบคงที่เมื่อใด
เมื่อสร้างไลบรารีคลาสใน C ++ คุณสามารถเลือกระหว่างไลบรารี dynamic ( .dll, .so) และ static ( .lib, .a) อะไรคือความแตกต่างระหว่างพวกเขาและเมื่อใดที่เหมาะสมที่จะใช้

16
การเชื่อมโยงแบบคงที่เทียบกับการเชื่อมโยงแบบไดนามิก
มีเหตุผลด้านประสิทธิภาพที่น่าสนใจในการเลือกการเชื่อมโยงแบบคงที่มากกว่าการเชื่อมโยงแบบไดนามิกหรือในทางกลับกันในบางสถานการณ์? ฉันได้ยินหรืออ่านข้อความต่อไปนี้ แต่ฉันไม่รู้เรื่องเพียงพอที่จะรับรองความจริง 1) ความแตกต่างของประสิทธิภาพรันไทม์ระหว่างการลิงก์แบบสแตติกและการลิงก์แบบไดนามิกนั้นมักจะเล็กน้อย 2) (1) ไม่เป็นความจริงหากใช้คอมไพเลอร์การทำโปรไฟล์ที่ใช้ข้อมูลโปรไฟล์เพื่อออพติคอลฮอตพา ธ ของโปรแกรมเนื่องจากการเชื่อมโยงแบบสแตติกคอมไพเลอร์สามารถปรับทั้งโค้ดของคุณและรหัสไลบรารี ด้วยการเชื่อมโยงแบบไดนามิกรหัสของคุณเท่านั้นที่สามารถเพิ่มประสิทธิภาพ หากใช้เวลาส่วนใหญ่ในการเรียกใช้รหัสห้องสมุดอาจทำให้เกิดความแตกต่างอย่างมาก มิฉะนั้น (1) ยังคงใช้

5
'ลิงก์แบบสแตติก' และ 'ลิงก์แบบไดนามิก' หมายถึงอะไร
ผมมักจะได้ยินคำว่า 'เชื่อมโยงแบบคง' และ 'เชื่อมโยงแบบไดนามิก' มักจะอยู่ในการอ้างอิงถึงรหัสที่เขียนในC , C ++หรือC # พวกเขาคืออะไรพวกเขากำลังพูดถึงอะไรกันแน่และพวกเขากำลังเชื่อมโยงอะไรกัน?

4
ฟังก์ชั่นการโทรไปจาก C
ฉันกำลังพยายามสร้างวัตถุแบบสแตติกที่เขียนใน Go to อินเตอร์เฟสด้วยโปรแกรม C (เช่นโมดูลเคอร์เนลหรือบางอย่าง) ฉันได้พบเอกสารเกี่ยวกับการเรียกฟังก์ชั่น C จาก Go แต่ฉันไม่พบวิธีการใช้งานอีกมาก สิ่งที่ฉันพบคือมันเป็นไปได้ แต่ซับซ้อน นี่คือสิ่งที่ฉันพบ: บล็อกโพสต์เกี่ยวกับการโทรกลับระหว่าง C และ Go เอกสาร Cgo โพสต์รายชื่อผู้รับจดหมาย ใครบ้างมีประสบการณ์กับสิ่งนี้หรือไม่? ในระยะสั้นฉันพยายามที่จะสร้างโมดูล PAM ที่เขียนทั้งหมดใน Go

2
การบอก gcc โดยตรงเพื่อเชื่อมโยงไลบรารีแบบคงที่
รู้สึกแปลกสำหรับฉันที่จะใช้-Wl,-Bstaticเพื่อบอกว่าgccฉันต้องการเชื่อมโยงกับไลบรารีใดแบบคงที่ ท้ายที่สุดฉันบอกgccข้อมูลอื่น ๆ โดยตรงเกี่ยวกับการเชื่อมโยงกับไลบรารี ( -Ldir, -llibname) เป็นไปได้หรือไม่ที่จะบอกไดรเวอร์ gcc โดยตรงว่าควรเชื่อมโยงไลบรารีใดแบบคงที่ คำชี้แจง:ฉันรู้ว่าหากห้องสมุดบางแห่งมีอยู่ในเวอร์ชันคงที่เท่านั้นมันจะใช้โดยไม่มี-Wl,-Bstaticแต่ฉันต้องการบอกเป็นนัยว่าgccชอบไลบรารีแบบคงที่ ฉันรู้ด้วยว่าการระบุไฟล์ไลบรารีโดยตรงจะเชื่อมโยงกับมัน แต่ฉันชอบที่จะให้ความหมายรวมถึงไลบรารีแบบคงที่และไดนามิกเหมือนกัน

1
จะเกิดอะไรขึ้นกับตัวแปรส่วนกลางและตัวแปรคงที่ในไลบรารีที่ใช้ร่วมกันเมื่อมีการเชื่อมโยงแบบไดนามิก
ฉันกำลังพยายามทำความเข้าใจว่าเกิดอะไรขึ้นเมื่อโมดูลที่มี globals และตัวแปรคงที่เชื่อมโยงกับแอปพลิเคชันแบบไดนามิก ตามโมดูลฉันหมายถึงแต่ละโครงการในโซลูชัน (ฉันทำงานกับสตูดิโอภาพเยอะมาก!) โมดูลเหล่านี้มีอยู่ในตัว * .lib หรือ * .dll หรือตัว * .exe เอง ฉันเข้าใจว่าไบนารีของแอปพลิเคชันมีข้อมูลส่วนกลางและแบบคงที่ของหน่วยการแปลแต่ละหน่วย (ไฟล์ออบเจ็กต์) ในส่วนข้อมูล (และอ่านเฉพาะส่วนข้อมูลหาก const) จะเกิดอะไรขึ้นเมื่อแอปพลิเคชันนี้ใช้โมดูล A ที่มีการเชื่อมโยงแบบไดนามิกในเวลาโหลด ฉันถือว่า DLL มีส่วนสำหรับโลกและสถิตยศาสตร์ ระบบปฏิบัติการโหลดหรือไม่ ถ้าเป็นเช่นนั้นจะโหลดไปที่ใด และจะเกิดอะไรขึ้นเมื่อแอปพลิเคชันใช้โมดูล B พร้อมการเชื่อมโยงแบบไดนามิกรันไทม์ หากฉันมีโมดูลสองโมดูลในแอปพลิเคชันของฉันที่ทั้งสองใช้ A และ B สำเนาของโลกของ A และ B จะถูกสร้างขึ้นตามที่ระบุไว้ด้านล่าง (หากเป็นกระบวนการที่แตกต่างกัน) DLLs A และ B สามารถเข้าถึงแอปพลิเคชัน globals ได้หรือไม่ (โปรดระบุเหตุผลของคุณด้วย) อ้างจากMSDN …

4
ลิงค์เกอร์ทำอะไร?
ฉันสงสัยมาตลอด ฉันรู้ว่าคอมไพเลอร์แปลงโค้ดที่คุณเขียนเป็นไบนารี แต่ลิงก์เกอร์จะทำอย่างไร พวกเขาเป็นปริศนาสำหรับฉันมาตลอด ฉันเข้าใจคร่าวๆว่า 'การเชื่อมโยง' คืออะไร เมื่อมีการเพิ่มการอ้างอิงถึงไลบรารีและเฟรมเวิร์กลงในไบนารี ฉันไม่เข้าใจอะไรที่นอกเหนือไปจากนั้น สำหรับฉันมัน "ใช้ได้" ฉันยังเข้าใจพื้นฐานของการเชื่อมโยงแบบไดนามิก แต่ไม่มีอะไรลึกซึ้งเกินไป ใครช่วยอธิบายเงื่อนไข
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.