कुछ लिंकर त्रुटियों को डीबग करने का प्रयास करते हुए, मैंने चालू/VERBOSE चालू किया और मैं आउटपुट को समझने की कोशिश कर रहा हूं। यह मेरे लिए होता है कि मैं वास्तव में नहीं जानता कि इसे कैसे पढ़ा जाए।वर्बोज़ वीसी ++ लिंकर आउटपुट को कैसे पढ़ा जाए
उदाहरण के लिए:
1>Compiling version info
1>Linking...
1>Starting pass 1
1>Processed /DEFAULTLIB:mfc80.lib
1>Processed /DEFAULTLIB:mfcs80.lib
1>Processed /DEFAULTLIB:msvcrt.lib
1>Processed /DEFAULTLIB:kernel32.lib
1>Processed /DEFAULTLIB:user32.lib
....
1>Processed /DEFAULTLIB:libgslcblasMD.lib
1>Searching libraries
1> Searching V:\Src\Solutions\\..\..\\Common\Win32\Lib\PlxApi.lib:
1> Searching ..\..\..\..\out\win32\release\lib\camerageometry.lib:
1> Searching ..\..\..\..\out\win32\release\lib\geometry.lib:
1> Found "public: __thiscall VisionMap::Geometry::Box2d::operator class VisionMap::Geometry::Box2DInt(void)const " ([email protected]@[email protected]@[email protected]@XZ)
1> Referenced in FocusDlg.obj
1> Loaded geometry.lib(Box2d.obj)
1>Processed /DEFAULTLIB:CGAL-vc80-mt.lib
1>Processed /DEFAULTLIB:boost_thread-vc80-mt-1_33_1.lib
यहाँ क्या हो रहा है?
मुझे लगता है कि मैं इस बिट को समझने:
1>Processed /DEFAULTLIB:libgslcblasMD.lib
1>Searching libraries
1> Searching V:\Src\Solutions\\..\..\\Common\Win32\Lib\PlxApi.lib:
1> Searching ..\..\..\..\out\win32\release\lib\camerageometry.lib:
1> Searching ..\..\..\..\out\win32\release\lib\geometry.lib:
1> Found "public: __thiscall VisionMap::Geometry::Box2d::operator class VisionMap::Geometry::Box2DInt(void)const " ([email protected]@[email protected]@[email protected]@XZ)
1> Referenced in FocusDlg.obj
1> Loaded geometry.lib(Box2d.obj)
यह ऊपर ऑपरेटर, जो FocusDlg.cpp में कहीं प्रयोग किया जाता है के कार्यान्वयन खोजने की कोशिश कर रहा है, और यह geometry.lib में यह पाता है।
लेकिन 1>Processed /DEFAULTLIB:libgslcblasMD.lib
का क्या अर्थ है? प्रतीक संकल्प का क्रम क्या निर्धारित करता है? libgslcblasMD.lib
को संसाधित करते समय यह एक विशेष चैनल लोड क्यों हो रहा है जो तृतीय पक्ष लाइब्रेरी है? या क्या मैं इसे गलत पढ़ रहा हूँ?
ऐसा लगता है कि लिंकर प्रतीकों परियोजना की विभिन्न वस्तु फ़ाइलों में संदर्भित से गुजर रहा है, लेकिन मैं क्या क्रम में पता नहीं है। यह तब प्रोजेक्ट संदर्भ, स्पष्ट आयात और स्वत: डिफ़ॉल्ट लाइब्रेरी आयात द्वारा प्रोजेक्ट का उपयोग करने वाली स्थिर पुस्तकालयों की खोज करता है; लेकिन यह एक क्रम में ऐसा करता है कि, फिर से, मेरे मनमाना लगता है।
जब उसे मिलने वाले प्रतीक, geometry.lib में उदाहरण के लिए, यह तो एक ही lib से अन्य प्रतीकों में से एक गुच्छा खोजने के लिए जारी है:
1> Searching V:\Src\Solutions\\..\..\\Common\Win32\Lib\PlxApi.lib:
1> Searching ..\..\..\..\out\win32\release\lib\camerageometry.lib:
1> Searching ..\..\..\..\out\win32\release\lib\geometry.lib:
1> Found "public: __thiscall VisionMap::Geometry::Box2d::operator class VisionMap::Geometry::Box2DInt(void)const " ([email protected]@[email protected]@[email protected]@XZ)
1> Referenced in FocusDlg.obj
1> Loaded geometry.lib(Box2d.obj)
1>Processed /DEFAULTLIB:CGAL-vc80-mt.lib
1>Processed /DEFAULTLIB:boost_thread-vc80-mt-1_33_1.lib
1> Found "public: __thiscall VisionMap::Geometry::Box2DInt::Box2DInt(int,int,int,int)" ([email protected]@[email protected]@[email protected]@Z)
1> Referenced in FocusDlg.obj
1> Referenced in ImageView.obj
1> Referenced in geometry.lib(Box2d.obj)
1> Loaded geometry.lib(Box2DInt.obj)
1> Found "public: virtual __thiscall VisionMap::Geometry::Point3d::~Point3d(void)" ([email protected]@[email protected]@[email protected])
1> Referenced in GPSFrm.obj
1> Referenced in MainFrm.obj
1> Loaded geometry.lib(Point3d.obj)
1> Found "void __cdecl VisionMap::Geometry::serialize<class boost::archive::binary_oarchive>(class boost::archive::binary_oarchive &,class VisionMap::Geometry::Point3d &,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected])
1> Referenced in GPSFrm.obj
1> Referenced in MainFrm.obj
1> Loaded geometry.lib(GeometrySerializationImpl.obj)
लेकिन फिर भी, किसी कारण से, यह करने के लिए पर चला जाता है उन प्रतीकों को ढूंढें जो अन्य libs में परिभाषित हैं, और बाद में ज्यामिति पर लौटते हैं (समय का एक गुच्छा)।
तो स्पष्ट रूप से यह नहीं कर रहा है "ज्यामिति में देखने के लिए और इस परियोजना में हर प्रतीक है कि के संदर्भ लोड, और फिर अन्य पुस्तकालयों के लिए जारी"। लेकिन यह मुझे स्पष्ट नहीं है कि प्रतीक लुकअप का क्रम है।
और क्या उन सभी पुस्तकालयों लिंकर के काम की शुरुआत में कार्रवाई की जा रही है, लेकिन उनमें से लोड करने के लिए किसी भी प्रतीक नहीं मिल के साथ सौदा है? क्या यह परियोजना वास्तव में msvcrt.lib
, kernel32.lib
से कुछ भी उपयोग नहीं करती है? असंभव लगता है।
तो बुनियादी तौर पर मैं लिंकर के ऑपरेशन में अंतर्निहित आदेश को समझने के लिए देख रहा हूँ।