คุณได้รับข้อผิดพลาด LNK4197 ในรุ่น 64 บิตของคอมไพเลอร์ Visual C++

ข้อมูลการสนับสนุนภายในของ Microsoft

จุดบกพร่อง #: 101959 (Visual Studio)

สรุป

เมื่อคุณสร้าง DLL โดยใช้รุ่น 64 บิตของคอมไพเลอร์ Visual C++ ของ Microsoft และตัวเชื่อมโยงเขต คุณอาจได้รับตัวเชื่อมโยงเขตหมายเลขข้อผิดพลาด LNK4197 ถ้าฟังก์ชันที่ถูกประกาศสำหรับการส่งออกมากกว่าหนึ่งครั้ง

อาการ

ตัวเชื่อมโยงเขตผลลัพธ์อาจคล้ายกับข้อมูลต่อไปนี้:

C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll  Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification   Creating library Sample.lib and object Sample.exp 

สาเหตุ

มีสร้างตัวเชื่อมโยงเขตหมายเลขข้อผิดพลาด LNK4197 เมื่อฟังก์ชันถูกประกาศสำหรับการส่งออกมากกว่าหนึ่งครั้ง ฟังก์ชันถูกประกาศไว้สำหรับการส่งออกหนึ่งในวิธีการต่อไปนี้:

  • ฟังก์ชันถูกประกาศ โดยใช้คำสำคัญ__declspec(dllexport)ในแฟ้มต้นฉบับ C:

    __declspec(dllexport) int DllSample() {   return 42;}
  • ฟังก์ชันถูกประกาศไว้ โดยใช้คำนิยามโมดูล ( แฟ้ม DEF):

    EXPORTS   DllSample

ข้อผิดพลาดตัวเชื่อมโยงข้อมูลนี้อาจเกิดขึ้นบ่อยที่สุดเมื่อทั้งสองคำสำคัญ__declspec(dllexport)และยังได้ แฟ้ม DEF จะใช้เพื่อกำหนดชื่อฟังก์ชันเดียวกันในตัว DLL โครงการ

การแก้ไข

เมื่อต้องการแก้ไขลักษณะการทำงานนี้ กำหนดฟังก์ชันส่งออกเพียงครั้งเดียว โดยใช้คำสำคัญ__declspec(dllexport)หรือ โดยการใช้การ แฟ้ม DEF อย่าใช้ทั้งสองวิธีการเหล่านี้

สถานะ

พฤติกรรมเช่นนี้เกิดจากการออกแบบ

ข้อมูลเพิ่มเติม

ประกาศฟังก์ชันสำหรับการส่งออกมากกว่าหนึ่งครั้งอาจทำให้เกิดข้อผิดพลาดตัวเชื่อมโยงข้อมูลที่อธิบายไว้ในส่วน "อาการ" ของบทความนี้ในรุ่น 32 บิตของ Microsoft คอมไพเลอร์ c ++ของ Windows และตัวเชื่อมโยงข้อมูล อย่างไรก็ตาม Microsoft แนะนำให้ คุณกำหนดฟังก์ชันส่งออกเพียงครั้งเดียวในทั้งรุ่น 32 บิต และ 64 บิตรุ่น Windows c ++คอมไพเลอร์และตัวเชื่อมโยงข้อมูล

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ขยายทักษะของคุณ
สำรวจการฝึกอบรม
รับฟีเจอร์ใหม่ก่อนใคร
เข้าร่วม Microsoft Insider

ข้อมูลนี้เป็นประโยชน์หรือไม่

ขอบคุณสำหรับคำติชมของคุณ

ขอขอบคุณสำหรับคำติชมของคุณ! เราคิดว่าอาจเป็นประโยชน์ที่จะให้คุณได้ติดต่อกับหนึ่งในตัวแทนฝ่ายสนับสนุน Office ของเรา

×