VS同一個解決方案中不同項目相互引用問題

作者最近也是遇到了需要在一個c++項目中引用另一個項目的類庫的情況。遇到一些問題分享給大家。
項目如下:

我想要在orbit項目中引用core項目的類庫:
(1)在orbit項目中添加core項目的引用:右鍵orbit項目的引用->添加引用->選擇core項目即可。
如果缺少此步驟會報如下錯誤:

2>cNoradSDP4.obj : error LNK2001: 無法解析的外部符號 "double __cdecl Zeptomoby::OrbitTools::sqr(double)" (?sqr@OrbitTools@Zeptomoby@@YANN@Z)
2>cNoradSGP4.obj : error LNK2001: 無法解析的外部符號 "double __cdecl Zeptomoby::OrbitTools::sqr(double)" (?sqr@OrbitTools@Zeptomoby@@YANN@Z)
2>cOrbit.obj : error LNK2001: 無法解析的外部符號 "double __cdecl Zeptomoby::OrbitTools::sqr(double)" (?sqr@OrbitTools@Zeptomoby@@YANN@Z)
2>cNoradBase.obj : error LNK2019: 無法解析的外部符號 "double __cdecl Zeptomoby::OrbitTools::Fmod2p(double)" (?Fmod2p@OrbitTools@Zeptomoby@@YANN@Z),該符號在函數 "protected: class Zeptomoby::OrbitTools::cEciTime __cdecl Zeptomoby::OrbitTools::cNoradBase::FinalPosition(double,double,double,double,double,double,double,double)" (?FinalPosition@cNoradBase@OrbitTools@Zeptomoby@@IEAA?AVcEciTime@23@NNNNNNNN@Z) 中被引用
2>cNoradSDP4.obj : error LNK2001: 無法解析的外部符號 "double __cdecl Zeptomoby::OrbitTools::Fmod2p(double)" (?Fmod2p@OrbitTools@Zeptomoby@@YANN@Z)
2>cNoradBase.obj : error LNK2019: 無法解析的外部符號 "double __cdecl Zeptomoby::OrbitTools::AcTan(double,double)" (?AcTan@OrbitTools@Zeptomoby@@YANNN@Z),該符號在函數 "protected: class Zeptomoby::OrbitTools::cEciTime __cdecl Zeptomoby::OrbitTools::cNoradBase::FinalPosition(double,double,double,double,double,double,double,double)" (?FinalPosition@cNoradBase@OrbitTools@Zeptomoby@@IEAA?AVcEciTime@23@NNNNNNNN@Z) 中被引用
2>cNoradSDP4.obj : error LNK2001: 無法解析的外部符號 "double __cdecl Zeptomoby::OrbitTools::AcTan(double,double)" (?AcTan@OrbitTools@Zeptomoby@@YANNN@Z)
2>cNoradBase.obj : error LNK2019: 無法解析的外部符號 "protected: void __cdecl Zeptomoby::OrbitTools::cJulian::Initialize(int,double)" (?Initialize@cJulian@OrbitTools@Zeptomoby@@IEAAXHN@Z),該符號在函數 "public: __cdecl Zeptomoby::OrbitTools::cJulian::cJulian(void)" (??0cJulian@OrbitTools@Zeptomoby@@QEAA@XZ) 中被引用
2>cOrbit.obj : error LNK2001: 無法解析的外部符號 "protected: void __cdecl Zeptomoby::OrbitTools::cJulian::Initialize(int,double)" (?Initialize@cJulian@OrbitTools@Zeptomoby@@IEAAXHN@Z)
2>cNoradBase.obj : error LNK2019: 無法解析的外部符號 "public: double __cdecl Zeptomoby::OrbitTools::cVector::Magnitude(void)const " (?Magnitude@cVector@OrbitTools@Zeptomoby@@QEBANXZ),該符號在函數 "protected: class Zeptomoby::OrbitTools::cEciTime __cdecl Zeptomoby::OrbitTools::cNoradBase::FinalPosition(double,double,double,double,double,double,double,double)" (?FinalPosition@cNoradBase@OrbitTools@Zeptomoby@@IEAA?AVcEciTime@23@NNNNNNNN@Z) 中被引用
2>cNoradBase.obj : error LNK2019: 無法解析的外部符號 "public: __cdecl Zeptomoby::OrbitTools::cEciTime::cEciTime(class Zeptomoby::OrbitTools::cVector const &,class Zeptomoby::OrbitTools::cVector const &,class Zeptomoby::OrbitTools::cJulian)" (??0cEciTime@OrbitTools@Zeptomoby@@QEAA@AEBVcVector@12@0VcJulian@12@@Z),該符號在函數 "protected: class Zeptomoby::OrbitTools::cEciTime __cdecl Zeptomoby::OrbitTools::cNoradBase::FinalPosition(double,double,double,double,double,double,double,double)" (?FinalPosition@cNoradBase@OrbitTools@Zeptomoby@@IEAA?AVcEciTime@23@NNNNNNNN@Z) 中被引用
2>cNoradSDP4.obj : error LNK2019: 無法解析的外部符號 "public: double __cdecl Zeptomoby::OrbitTools::cJulian::ToGmst(void)const " (?ToGmst@cJulian@OrbitTools@Zeptomoby@@QEBANXZ),該符號在函數 "public: __cdecl Zeptomoby::OrbitTools::cNoradSDP4::cNoradSDP4(class Zeptomoby::OrbitTools::cOrbit const &)" (??0cNoradSDP4@OrbitTools@Zeptomoby@@QEAA@AEBVcOrbit@12@@Z) 中被引用
2>cOrbit.obj : error LNK2019: 無法解析的外部符號 "public: __cdecl Zeptomoby::OrbitTools::cJulian::cJulian(int,double)" (??0cJulian@OrbitTools@Zeptomoby@@QEAA@HN@Z),該符號在函數 "public: __cdecl Zeptomoby::OrbitTools::cOrbit::cOrbit(class Zeptomoby::OrbitTools::cTle const &)" (??0cOrbit@OrbitTools@Zeptomoby@@QEAA@AEBVcTle@12@@Z) 中被引用
2>cOrbit.obj : error LNK2019: 無法解析的外部符號 "public: void __cdecl Zeptomoby::OrbitTools::cVector::Mul(double)" (?Mul@cVector@OrbitTools@Zeptomoby@@QEAAXN@Z),該符號在函數 "public: void __cdecl Zeptomoby::OrbitTools::cEci::ScalePosVector(double)" (?ScalePosVector@cEci@OrbitTools@Zeptomoby@@QEAAXN@Z) 中被引用
2>cOrbit.obj : error LNK2019: 無法解析的外部符號 "public: __cdecl Zeptomoby::OrbitTools::cTle::cTle(class Zeptomoby::OrbitTools::cTle const &)" (??0cTle@OrbitTools@Zeptomoby@@QEAA@AEBV012@@Z),該符號在函數 "public: __cdecl Zeptomoby::OrbitTools::cOrbit::cOrbit(class Zeptomoby::OrbitTools::cOrbit const &)" (??0cOrbit@OrbitTools@Zeptomoby@@QEAA@AEBV012@@Z) 中被引用
2>cOrbit.obj : error LNK2019: 無法解析的外部符號 "public: __cdecl Zeptomoby::OrbitTools::cTle::~cTle(void)" (??1cTle@OrbitTools@Zeptomoby@@QEAA@XZ),該符號在函數 "int `public: __cdecl Zeptomoby::OrbitTools::cOrbit::cOrbit(class OrbitTools::cOrbit::dtor$0 const &)'::`1'::dtor$0" (?dtor$0@?0???0cOrbit@OrbitTools@Zeptomoby@@QEAA@AEBV012@@Z@4HA) 中被引用
2>cOrbit.obj : error LNK2019: 無法解析的外部符號 "public: double __cdecl Zeptomoby::OrbitTools::cTle::GetField(enum Zeptomoby::OrbitTools::cTle::eField,enum Zeptomoby::OrbitTools::cTle::eUnits,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,bool)const " (?GetField@cTle@OrbitTools@Zeptomoby@@QEBANW4eField@123@W4eUnits@123@PEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z),該符號在函數 "public: __cdecl Zeptomoby::OrbitTools::cOrbit::cOrbit(class Zeptomoby::OrbitTools::cTle const &)" (??0cOrbit@OrbitTools@Zeptomoby@@QEAA@AEBVcTle@12@@Z) 中被引用
2>C:\Users\wxj233\Desktop\tlePredict\tlePredict\x64\Debug\orbit.dll : fatal error LNK1120: 12 個無法解析的外部命令

各種函數無法被解析。

(2)添加外部依賴:右鍵orbit項目->屬性,按下圖順序選擇(注意選擇realease還是debug版本),將core項目的頭文件目錄添加上即可。
 

(3)設置項目的配置類型:一般創建項目時配置類型爲.exe,這裏我們需要將core項目的配置類型改爲靜態庫.lib,關於.lib和.dll的區別,.lib用於編譯.dll用於運行,詳情請讀者自行百度。orbit項目由於我是要.dll庫所以我設置orbit項目配置類型爲.dll。依然實在項目屬性頁配置,選擇常規。
 

請讀者注意realease和debug配置和你實際編譯版本需要一致,不一致還是會報錯。

發佈了41 篇原創文章 · 獲贊 17 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章