我們在 VS 中創建 Win32 控制台應用程序,vs 會為解決方案創建默認地創建 4 個 filters(資源管理器中沒有對應的目錄和文件夾):
- 頭文件:一般為
.h
文件 - 外部依賴項
- 源文件:一般為
.cpp
文件 - 資源文件
1. 外部依賴項 & 資源文件
外部依賴項:C++ 外部依賴項有很多,大部分都是靜態庫文件,編譯的時候會遞歸關聯起來生成可執行文件,所以可執行文件才會大很多。
編譯的時候: 外部依賴項都是一個填充地址 , 比如 你的代碼里調用 外部依賴函數地址 Extern_funA 。
- 預編譯的時候展開頭文件,
- 編譯生成obj文件的時候,Extern_funA 就是一個填充地址 比如 0x00 00 00 00
- 鏈接的時候基地址重定位生成對應的 Extern_funA 地址。
- 鏈接的時候會根據你的工程配置想一個去查找 DLL 導出符號表,發現沒有找到 Extern_funA 。那么就會出錯,說無法定位外部符號。
右鍵【源文件】,選擇【添加 ⇒ 新建項】,比如此時我們創建,
test.cpp
文件,只需 include 一個文件:#include <iostream>
此時重新點開 【外部依賴項】filter,便會看到引入了相當多的庫文件。
資源文件:主要是你用到的一些程序代碼以外的東西,比如圖片之類,或者菜單、工具欄之類的。
2. 庫目錄 & 附加依賴項
庫目錄只是查找目錄,類似環境變量 PATH;具體用哪一個需要指明的,如果不在附加依賴項里填上,就需要在代碼里用
#pragma comment(lib, “xxx.lib”)
來手動指定了。你寫代碼讀寫一個文件需要寫明文件名吧,這個文件名就相當於那個lib , 但讀寫這個文件可以不寫全路徑,就是因為有工作目錄(working directory)的存在。
3. 添加依賴項目
1、新建解決方案,項目A
2、為項目A添加一個依賴項目B,項目B做為靜態lib被項目引用,
項目B創建步驟如下:
選擇菜單”文件”->新建->項目,彈出“新建項目”對話框;
左側列表選擇Visual C++,右側列表選擇win32控制台應用程序,
對話框下面輸入名稱,選擇位置,解決方案選擇添加到解決方案,確定。
Win32應用程序向導,下一步,選擇應用程序類型為靜態庫,
添加公共頭文件以用於選擇MFC(根據實際情況選擇,因為項目需求<nb30.h>編譯需要選擇MFC),完成。
3、項目配置,項目A右鍵選擇屬性,選擇通用屬性,引用->添加新引用->選擇項目B;
引用項目B的頭文件目錄,步驟如下:配置屬性->VC++目錄->包含目錄:添加項目B頭文件路徑..\B\Header。
其中編譯的時候會出項目A引用項目B的接口無法解析,可能是3步驟沒有做。