ข้อจำกัดความรับผิดชอบ: นี่เป็นวิธีแก้ปัญหาไม่ใช่วิธีแก้ปัญหาสำหรับคำตอบของคุณ แต่ยังเป็นไปได้ที่จะเป็นไปได้
หากคุณต้องการแน่ใจว่าไม่มีการอ้างอิงจาก VS เอง - แต่มาพร้อมกับข้อเสียของตัวเอง - ในการตั้งค่าการสร้างรหัสคุณสามารถเลือกที่จะไปกับ Multi Threaded (MT) / Multi Threaded Debug (MD) (สำหรับการสร้างการดีบัก ) แทน MT DLL (MTd) / MT Debug DLL (MDd)
ข้อเสียคืออะไร?
- มันจะเพิ่มขนาดที่สามารถใช้งานได้และไบนารี่ของคุณ (แม้ว่าถ้าคุณกำลังสร้างเกมนี่อาจจะเล็กน้อย)
- รวบรวมในลักษณะนี้จะไม่ได้รับประโยชน์จากการปรับปรุงที่กำลังรันไทม์ (เช่นถ้า Microsoft ออก VC ++ 2015 SP2, SP3, SP4 เป็นต้น) แต่นั่นก็ขึ้นอยู่กับคุณแล้ว
- การใช้ RAM เพิ่มเติม (ไม่สำคัญ) เนื่องจากคุณไม่ได้ใช้รหัสที่โหลด / โหลดอยู่ (DLL) อีกครั้ง
- คุณต้องแน่ใจว่าไลบรารีทั้งหมดที่คุณเชื่อมโยงถูกคอมไพล์กับรันไทม์เดียวกันการเชื่อมโยงอื่นอาจล้มเหลวหรือข้อผิดพลาดรันไทม์ที่น่าสนใจอาจเกิดขึ้น (อาจไม่ใช่ แต่มันเกิดขึ้นกับฉันครั้งเดียวในชีวิตในโครงการแบบดั้งเดิมที่อัปเดตเป็น VS ใหม่ล่าสุด)
และอะไรคือข้อดี?
- ปฏิบัติการของคุณจะไม่มีการพึ่งพา "ภายนอก" จาก VS ตัวเอง (ไม่มีข้อกำหนด msvc * .dll)
- บางคนเห็นว่านี่เป็นการเพิ่มประสิทธิภาพเนื่องจากคุณกำลังกำจัดค่าใช้จ่ายในการเรียก DLL ในขณะที่นี่เป็นความจริงตามหลักทฤษฏีการปรับปรุงนั้นเล็กน้อยในทางปฏิบัติ
ตรวจสอบที่ลิงค์นี้เพื่อดูคำอธิบายที่ละเอียดยิ่งขึ้นและสำหรับข้อผิดพลาดและความล้มเหลวที่คุณอาจพบโดยใช้รันไทม์แบบคงที่
วิธีแก้ปัญหาอื่นคือการวาง DLL ที่จำเป็นทั้งหมดไว้ในที่ซึ่งไบนารีของคุณอยู่ แอปพลิเคชันของคุณจะไม่ได้รับประโยชน์จากการอัปเดต (ไปยังไลบรารีรันไทม์) แต่ก็เป็นได้
ทางออกที่แท้จริงคือการกระจายแอปพลิเคชันในโหมด release / non debug dll (MTd) และจัดหาตัวติดตั้งที่แจกจ่ายต่อได้ VC ++ ที่ถูกต้อง (และตัวติดตั้งไลบรารีอื่น ๆ ที่คุณอาจใช้เช่น OpenAL, DirectX9, PhysX) ก่อนเรียกใช้แอปพลิเคชันของคุณ (ตามคำตอบอื่น ๆ ที่ชี้ให้เห็น)
นอกจากนี้ตรวจสอบให้แน่ใจว่าผู้ใช้ทราบว่าเขา / เธออาจจำเป็นต้องอัปเดตไดรเวอร์ GPU ของตน (เนื่องจากมีหลาย runtimes สำหรับแอพพลิเคชั่นมากมายเช่น OpenGL, Vulcan)