VS2010添加靜態鏈接庫——jsoncpp

因爲畢設需要處理json文件(19G本當に難しいですね~),我選擇了C++語言進行處理,因而需要jsoncpp。之前並不太懂靜態鏈接庫,所以也算是用半個上午補了一課。
jsoncpp下載:https://sourceforge.net/projects/jsoncpp/files/


下面是具體的步驟(真的很具體):
一 編譯鏈接

1 在相應官網下載jsoncpp

2 解壓得到jsoncpp-src-0.5.0文件

3 打開jsoncpp-src-0.5.0 -> makefiles -> vs71 -> jsoncpp.sln

4 轉換項目爲VS2010格式

5 選擇debug模式

6 在“解決方案資源管理器”中右擊 lib_json 選擇->僅用於項目 -> 僅生成lib_json

7 再次右擊 lib_json 選擇->僅用於項目 -> 僅鏈接lib_json

8 選擇release模式

9 重複操作 6 和 7

10 生成的.lib文件夾在jsoncpp-src-0.5.0 ->build -> vs71 中。

二 創建靜態鏈接庫SDK

1 在 D:\study\toolsForVS2010 (這裏換成你自己想要放置靜態鏈接庫SDK的位置)中創建文件夾 jsonPP

2 在jsonPP中創建文件夾 include 和 lib

3 在include中創建文件夾 json ,將jsoncpp-src-0.5.0 -> include -> json 中的.h文件全部複製過來

4 在lib中創建文件夾debug和release ,把jsoncpp-src-0.5.0 ->build -> vs71 -> debug -> lib_json 中的.lib文件(比如json_vc71_libmtd.lib)複製到debug文件夾(此時可以修改文件夾名爲json.lib),同理,把jsoncpp-src-0.5.0 ->build -> vs71 -> release -> lib_json 中的.lib文件(比如json_vc71_libmtd.lib)複製到release文件夾

三 打開要添加json的項目,或新建一個WIN32控制檯程序(添加main.cpp,加入源代碼,示例代碼可在jsoncpp.sln的 json_test中找到)

1 選擇 項目 ->屬性

2 選擇 配置屬性 -> C/C++ -> 常規 右邊的“附加包含目錄” 添加include文件夾 :D:\study\toolsForVS2010\jsonPP\include

3 選擇 配置屬性 -> C/C++ -> 代碼生成 右邊的“運行庫” 選擇 MTd

4 選擇 配置屬性 -> 連接器 -> 常規 右邊的“附加庫目錄” 添加lib文件夾 :D:\study\toolsForVS2010\jsonPP\lib\debug

5 選擇 配置屬性 -> 連接器 -> 輸入 右邊的“附加依賴項” 添加lib文件 :json_vc71_libmtd.lib(若在 二 - 4 中修改了文件名爲json.lib,則此處改成json.lib)

6 點擊應用完成json配置。

7 若項目需要發佈時(即項目選擇release),則

a. 選擇 配置屬性 -> C/C++ -> 代碼生成 右邊的“運行庫” 選擇MT

b. 選擇 配置屬性 -> 連接器 -> 常規 右邊的“附加庫目錄” 添加lib文件夾 :D:\study\toolsForVS2010\jsonPP\lib\release

c. 然後可以運行程序獲得release版本程序


靜態鏈接庫和動態鏈接庫:
靜態連接庫就是把(lib)文件中用到的函數代碼直接鏈接進目標程序,程序運行的時候不再需要其它的庫文件;動態鏈接就是把調用的函數所在文件模塊(DLL)和調用函數在文件中的位置等信息鏈接進目標程序,程序運行的時候再從DLL中尋找相應函數代碼,因此需要相應DLL文件的支持。
靜態鏈接庫與動態鏈接庫都是共享代碼的方式,如果採用靜態鏈接庫,則無論你願不願意,lib 中的指令都全部被直接包含在最終生成的 EXE 文件中了。但是若使用 DLL,該 DLL 不必被包含在最終 EXE 文件中,EXE 文件執行時可以“動態”地引用和卸載這個與 EXE 獨立的 DLL 文件。靜態鏈接庫和動態鏈接庫的另外一個區別在於靜態鏈接庫中不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接庫。動態庫就是在需要調用其中的函數時,根據函數映射表找到該函數然後調入堆棧執行。如果在當前工程中有多處對dll文件中同一個函數的調用,那麼執行時,這個函數只會留下一份拷貝。但是如果有多處對lib文件中同一個函數的調用,那麼執行時,該函數將在當前程序的執行空間裏留下多份拷貝,而且是一處調用就產生一份拷貝。


參考的博文網址:
http://blog.csdn.net/crazyer2010/article/details/8962449

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章