أخطاء خارجية غريبة لم يتم حلها في الكائنات المرتبطة
-
30-09-2019 - |
سؤال
باستخدام Visual Studio 10 C ++ ، لدي خطأ في الارتباط غريب. لسبب ما ، لن ترتبط الإشارات إلى كائن عالمي بهذا الكائن العالمي. إنه يخبرني أن الرمز غير محدد ولكن عندما يكون لدي ملف .COD ، يكون الرمز صحيحًا في اليوم.
الخطأ:
FTShell.lib(ftcommodule.obj) : error LNK2001: unresolved external symbol
"class CFTModuleShellBase * _pFTModule" (?_pFTModule@@3PAVCFTModuleShellBase@@A)
لكن ملف .COD لملف CPP الرئيسي يعرض كل من الإعلان وتخصيص الرمز العالمي:
PUBLIC ?_pFTModule@@3PAVCFTModuleShellBase@@A ; _pFTModule
_DATA SEGMENT
?_pFTModule@@3PAVCFTModuleShellBase@@A DD FLAT:?_Module@@3VCFTComModule@@A ; _pFTModule
ORG $+4
فلماذا لا تتطابق المكتبة الثابتة _pftmodule مع الرمز العالمي في ملف المصدر الخاص بي؟
تحرير: ركضت msbuild من سطر الأوامر:
Link:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe
/ERRORREPORT:QUEUE.... "C:\(path)\FTTrace.res"
"C:\(path)\FTTrace.obj"
ولاحظت في النهاية هناك ملف واحد فقط. هناك اثنين من ملفات .cpp في المشروع. و MSBuild قام ببناء كلا الملف. فلماذا لم يمر كل الملف على الرابط. لا يعامل ملف .vcxproj ملفات .cpp بشكل مختلف. لماذا لا يتضمن MSBuild كلا الملفين على خطوة الارتباط؟
<ItemGroup>
<ClCompile Include="FTTrace.cpp" />
<ClCompile Include="TraceImpl.cpp" />
</ItemGroup>
المحلول
الغريب أن الخطأ كان نتيجة تعيين خاصية Implib على قيمة سيئة. قالت ورقة العقار: <ImpLib>$(OneOfMyPathVars)\%(Filename).lib</Implib>
. نظرًا لأن ٪ (اسم الملف) فارغًا خلال مرحلة الارتباط "C: foo.lib" ، لا يتم إنشاء أي مؤشرات. وهذا تسبب في العوامل الخارجية التي لم يتم حلها من الوظائف المعلنة في المشروع. ربما خطأ في الرابط لكنه كان مصابًا بالذات.