VS2010添加静态链接库——jsoncpp

来源:互联网 发布:软件测试实战项目 编辑:程序博客网 时间:2024/06/08 12:37

因为毕设需要处理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

0 0