Bazı bağlayıcı hatalarının hatalarını ayıklamaya çalışıyorum, ben/VERBOSE'u açtım ve çıktıyı anlamaya çalışıyorum. Bana bunu nasıl okuyacağımı bilmiyorum. ÖrneğinVB ++ bağlantı noktası çıktısı nasıl okunur?
:
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
Burada neler oluyor? FocusDlg.cpp yerde kullanılır yukarıdaki operatörü uygulanmasını bulmaya çalışıyor
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)
ve geometry.lib bulur:
Ben bu biraz anlıyorum.
1>Processed /DEFAULTLIB:libgslcblasMD.lib
ne anlama geliyor? Sembol çözünürlüğünün sırasını ne belirler? 3. taraf kitaplığı olan libgslcblasMD.lib
işlenirken neden bu belirli sembolü yüklüyor? Yoksa yanlış mı okuyorum?
Linker, projenin çeşitli nesne dosyalarında atıfta bulunulan sembollerden geçiyor gibi görünüyor, ancak hangi sırayla hiçbir fikrim yok. Daha sonra projenin kullandığı statik kütüphaneleri arar - proje referansı, açık ithalat ve otomatik varsayılan kütüphane ithalatı; ama yine de, bana göre keyfi görünüyor.
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)
Ama sonra, nedense, bu şekilde devam eder:
o geometry.lib örneğin, daha sonra aynı lib diğer sembollerin bir demet bulmak için bir sembol devam bulur
Diğer lib'lerde tanımlanan sembolleri bul ve daha sonra geometriye geri dön (birkaç kez).Açıkçası, "geometriye bakıp, projede referans gösterilen her sembolü yükler ve sonra diğer kitaplıklara devam eder" yapmaz. Ancak, 'un sembolünün sırasının sırasının ne olduğu açık değil.
Ve tüm bu kütüphanelerin, linker işinin başında işlendiği, ancak onlardan yüklenecek herhangi bir sembol bulmadığı şey nedir? Bu proje gerçekten msvcrt.lib
, kernel32.lib
'dan herhangi bir şey kullanmıyor mu? Olası görünmüyor.
Temel olarak, linker'ın çalışmasında alttaki siparişi deşifre etmek istiyorum.