原创文章,转载请注明原作者与本文原始URL。
版本:
jsoncpp-src-0.5.0.zip
简介:
jsoncpp是用cpp实现的json库,可以拼装,解析,生成json串。
我们要把他编译成动态库。
这个库使用 scons 来组织工程的,并且要用python编译,而不是我熟悉的Makefile.
要编译的文件全部位于 ./src/lib_json,其实就3个.cpp文件。
为了编译方便,我自己写了Makefile如下:
g++ json_reader.cpp json_value.cpp json_writer.cpp -fPIC -Wall -shared -o ../../build/x64/release/libjson.so -I../../include -I.
编译windows版本:
编译windows的时候需要自己建立工程,我用的vs2010,生成动态库要记得预定义导出宏,JSON_DLL_BUILD ,这样才能让dll导出接口类。
在config.h中导出的类是这样定义的: define JSON_API __declspec(dllexport)
编译windows版注意的问题:
在此之间有个插曲,如下的代码:
int main(int argc,char* argv[]) { Json::Reader reader; return 0; }
居然在析构 Reader的时候会崩溃,而linux版本完全没问题啊,看来是编译的库有问题。
最后发现原因是,用vs编译的时候,把工程配置的“配置类型”有静态库改成动态库,这样出来的动态库是有问题的。
解决方法:
重新建立一个动态库工程,重新添加源码,编译,然后可以正常使用了。
这次生成的库的大小都比旧的小了不少,看来确实不一样。
总结:
用vs编译动态库,要用向导建立动态库工程;而不能简单的把“配置类型”改成动态库,否则虽然编译没问题,但是运行会有问题。
原创文章,转载请注明原作者与本文原始URL。