สิ่ง#pragma comment
ต่อไปนี้หมายถึงอะไร?
#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
สิ่ง#pragma comment
ต่อไปนี้หมายถึงอะไร?
#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
คำตอบ:
#pragma comment
เป็นคอมไพเลอร์คำสั่งที่ระบุ Visual C ++ ที่จะแสดงความคิดเห็นในไฟล์วัตถุที่สร้างขึ้น ความคิดเห็นนั้นสามารถอ่านได้โดย linker เมื่อมันประมวลผลไฟล์วัตถุ
#pragma comment(lib, libname)
บอกให้ linker เพิ่มไลบรารี 'libname' ลงในรายการการพึ่งพาของไลบรารีราวกับว่าคุณเพิ่มไว้ในคุณสมบัติโครงการที่ Linker->Input->Additional dependencies
ดู#pragma แสดงความคิดเห็นใน MSDN
ฉันมักจะเรียกพวกเขาว่า "คอมไพเลอร์คำสั่ง" พวกเขาสั่งให้คอมไพเลอร์ทำสิ่งต่าง ๆ รวมทั้ง libs เช่นที่แสดงด้านบนปิดการใช้งานข้อผิดพลาดเฉพาะ ฯลฯ ในระหว่างขั้นตอนการรวบรวม
บริษัท คอมไพเลอร์มักจะสร้างส่วนขยายของตัวเองเพื่ออำนวยความสะดวกคุณสมบัติของพวกเขา ตัวอย่างเช่น (ฉันเชื่อว่า) Microsoft เริ่มต้นข้อตกลง "#pragma ครั้งเดียว" และเป็นเฉพาะในผลิตภัณฑ์ MS ตอนนี้ฉันไม่แน่ใจ
Pragma Directivesประกอบด้วย "#pragma comment" ในตารางที่คุณจะเห็น
HTH
ตัวอย่างเช่นฉันสงสัยว่า GCC มีชุด # pragma ของตัวเอง
#pragma comment
หมายถึง
ลิงค์เหล่านี้ในไลบรารีที่เลือกใน MSVC ++
คำสั่ง Pragma ระบุตัวเลือกคอมไพเลอร์ระบบปฏิบัติการหรือเครื่อง (x86 หรือ x64 ฯลฯ ) มีหลายตัวเลือก รายละเอียดสามารถพบได้ในhttps://msdn.microsoft.com/en-us/library/d9x1s805.aspx
#pragma comment( comment-type [,"commentstring"] )
มีรูปแบบนี้
อ้างอิงhttps://msdn.microsoft.com/en-us/library/7f0aews7.aspxสำหรับรายละเอียดเกี่ยวกับประเภทความคิดเห็นที่แตกต่างกัน
#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
บรรทัดของรหัสข้างต้นรวมถึงชื่อห้องสมุด (หรือเส้นทาง) ที่จำเป็นต้องค้นหาโดย linker รายละเอียดเหล่านี้รวมเป็นส่วนหนึ่งของบันทึกการค้นหาไลบรารีในไฟล์วัตถุ
ดังนั้นในกรณีนี้kernel.lib
และuser32.lib
ถูกค้นหาโดย linker และรวมอยู่ในปฏิบัติการสุดท้าย
คำตอบและเอกสารที่ MSDN จัดทำนั้นดีที่สุด แต่ฉันต้องการเพิ่มกรณีทั่วไปที่ฉันใช้บ่อยๆซึ่งต้องใช้#pragma comment
การส่งคำสั่งไปยังตัวเชื่อมโยงในเวลาเชื่อมโยงตัวอย่างเช่น
#pragma comment(linker,"/ENTRY:Entry")
บอก linker ให้เปลี่ยนรูปแบบจุดเข้าWinMain()
เป็นEntry()
หลังจากนั้นCRTStartup
จะทำการโอนย้ายการควบคุมไปEntry()
Linker -> General -> Additional Library Directories
) หรือไม่?