编译jsoncpp库以及要注意的问题

原创文章,转载请注明原作者与本文原始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。

时间: 2024-10-11 03:36:57

编译jsoncpp库以及要注意的问题的相关文章

ndk编译jsoncpp

本例采用jsoncpp-src-0.6.0-rc2-amalgamation.tar java调用语句 int id = 1001;          String name = "Kevin";          String result = system.toBuildJson(id, name);          Log.i(TAG,String.format("Id:%1$d,Name:%2$s,The json formated string:%3$s"

c++库之jsoncpp库

官方网址https://github.com/open-source-parsers/jsoncpp. 我是以源码的形式使用的,从官网下载源码后解压,然后copy相应的.h和.cpp文件到你的项目目录.编译使用即可.用起来也非常简单,主要以数组的形式进行 使用.下面从自己的项目中复制出一段代码作为示例: json数据: { "msg": "", "status": "1", "message": { &qu

在Ubuntu下编译Assimp库

在Ubuntu下编译Assimp库 如何在Ubuntu下编译Assimp库?这是我以前编译成功后做的笔记,供参考. 1.去下面的网站去下载Assimp库: http://assimp.sourceforge.net/ 2.安装cmake,似乎Assimp库只能通过cmake和vs工程文件进行构建,普通的makfile是通过它来产生的.Ubuntu下使用sudo apt-get install cmake.然后通过cmake --version查看cmake的版本,我cmake版本是2.8.11.

spdk dpdk编译动态库( shared library )

1,dpdk编译共享库 默认情况下都编译出静态库,如果想编译出动态库,把config/common_base文件中的CONFIG_RTE_BUILD_SHARED_LIB改成y即可. 2,spdk编译共享库 修改mk/spdk.common.mk: # Archive $(OBJS) into [email protected] (.so) # Archive $(OBJS) into [email protected] (.a) # LIB_C=\ #       $(Q)echo "  LI

gcc 动态编译 动态库路径

gcc 动态编译(共享库) 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令优点:体积小,编译快缺点:依赖性高 代码如下: [[email protected] shared]# cat add.cint add (int x, int y) {return x + y;} Parsed in 0.007 seconds at 12.13 KB/sadd.c 求和函数 代码如下: [[email protected] shared]# cat print.

cocos2dx 交叉编译 编译 iconv库

> cocos2dx提供三方的iconv来转化字符问题,交叉编译到android的时候,需要引入iconv的module,下载iconv,解压到cocos2d根目录 ,编写mk: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_ARM_MODE := arm ifeq ($(BUILD_WITH_NEON),1) LOCAL_ARM_NEON := true endif LOCAL_MODULE := iconv LOCAL_CF

vs2013 + python3.52 + boost1.61, 编译C++库失败

使用vs2013  + python3.52 + boost1.61,  编译C++库,  失败!  提示如下": boost::python::detail::init_module(struct PyModuleDef &,void (__cdecl*)(void))" ([email protected]@[email protected]@@[email protected]@[email protected]@[email protected]),该符号在函数 PyI

VS2008编译boost库

一.下载首先从boost官方主页http://www.boost.org/下载最新版boost安装包,我用的版本是boost.1.49.0二.新建文件夹 如果是使用下载的安装包,那么请将boost安装包解压至本地新建的目录,如:F:\boost 三.编译 (1)从vs2008的工具菜单进入命令提示窗口(单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2008”,指向“Visual Studio tools(工具)”,然后单击“Visual Studio

VS2008 编译 libpng库

一.下载libpng和zlib http://sourceforge.net/projects/libpng/ http://sourceforge.net/projects/libpng/files/zlib/ 二.解压libpng和zlib到同一文件夹下!并更名文件夹zlib...为zlib 三.打开libpng.sln或libpng.vcproj 设置libpng工程所有配置为不使用预编译头,编译相应版本即可. VS2008 编译 libpng库,码迷,mamicode.com