מידע פנימי לתמיכה של Microsoft
באג #: 101959 (Visual Studio)
סיכום
בעת בניית קובץ DLL באמצעות גירסת 64 סיביות של Microsoft מהדר C++ חזותיים ושל מקשר, ייתכן שתקבל מקשר מספר שגיאה 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) ו- a. קובץ DEF משמשות להגדרת שם הפונקציה זהה. פרוייקט ה-DLL.
פתרון
כדי לפתור אופן פעולה זה, להגדיר פונקציות מיוצאות פעם אחת בלבד, על-ידי שימוש במילת המפתח __declspec(dllexport) או באמצעות. קובץ DEF. אין להשתמש בשתי שיטות אלה.
מצב
אופן פעולה זה הוא מכוון.
מידע נוסף
הצהרה פונקציה עבור ייצוא יותר מפעם אחת עשויה לא הפיק מקשר השגיאה המתוארת בסעיף 'מאפייני הבעיה' במאמר זה בגירסאות 32 סיביות של Microsoft Windows C++ המהדר ו מקשר. עם זאת, Microsoft ממליצה להגדיר פעולות ייצוא של הפונקציה פעם אחת בלבד בגירסאות 32 סיביות ו- 64 סיביות של Windows C++ המהדר ו מקשר.