messagpack的使用
我打算使用messagepack对通信的对象进行序列化,使用的方式参考这篇文章:
http://www.cppfans.org/1410.html
此处记录一下自己遇到的一些问题
先是用VS2010对messagepack编译,生成静态库,这个没有问题,新建一个test项目来学习,测试messagepack,编译没有问题,连接的时候出现下面的问题
错误 1 error LNK2019: 无法解析的外部符号 __imp__ntohl@4,该符号在函数 "private: static void __cdecl msgpack::packer<class msgpack::sbuffer>::_pack_raw(class msgpack::sbuffer &,unsigned int)" (?_pack_raw@?$packer@Vsbuffer@msgpack@@@msgpack@@CAXAAVsbuffer@2@I@Z) 中被引用 D:\project_kuku\program\library\msgpack-0.5.4\test_msgpack\enter.obj test_msgpack
此处说ntohl这个函数没有函数实现,而这个函数是SOCKET函数,查一下MSDN,它需要ws2_32.lib这个静态库来支持,在cpp文件中加上对这个库的引用,或者在项目属性的库依赖项加上ws2_32.lib,这回连接就没问题了
项目中使用的VS2013 Desktop 版本,在此版本中使用messagepack时出现下面的问题
错误 1 error C2371: “int8_t”: 重定义;不同的基类型 c:\program files\microsoft visual studio 12.0\vc\include\stdint.h 8 1 test_msgpack
看一下输出的显示
1>c:\program files\microsoft visual studio 12.0\vc\include\stdint.h(8): error C2371: “int8_t”: 重定义;不同的基类型
1> d:\project_kuku\program\library\msgpack-0.5.4\src\msgpack\sysdep.h(23) : 参见“int8_t”的声明
一个是在stdint.h中定义的,另一个是在msgpack\sysdep.h中定义的,前面一个是系统文件,后面一个是库里面的声明文件,打开后面一个文件看一下
#ifdef _MSC_VER
typedef __int8 int8_t;
typedef unsigned __int8 uint8_t;
typedef __int16 int16_t;
typedef unsigned __int16 uint16_t;
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#else
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#endif
其实是_MSC_VER的版本造成的问题,这个时候只要把#ifdef改成#ifndef即可
messagpack的使用的更多相关文章
- 编码与模式------《Designing Data-Intensive Applications》读书笔记5
进入到第四章了,本篇主要聊的点是编码(也就是序列化)与代码升级的一些场景,来梳理存储之中涉及到的编解码的流程.目前主流的编解码便是来自Apache的Avro,来自Facebook的Thrift与Goo ...
随机推荐
- Lucene增删改查
IndexManager.java package com.witwicky.lucene; import java.io.File; import java.util.ArrayList; impo ...
- nginx日志request_time 和upstream_response_time区别
笔者在根据nginx的accesslog中$request_time进行程序优化时,发现有个接口,直接返回数据,平均的$request_time也比较大.原来$request_time包含了用户数据接 ...
- CentOS7安装google chrome浏览器
1,下载离线包 rpm 2,rpm -ivh ** 报错: lsb_release被chrome依赖 libXss.so被chrome依赖 libappindicator3被chrome依赖 yum ...
- Web服务端开发需要考虑的问题(续)
方案汇总API设计应用架构代码库管理工具链工作计划目标预期关键过程service-driver接口定义及实现web样例 方案汇总 API设计 基于https. 只提供纯数据. 基于一开始提出的rest ...
- 用python做数字油画或者从一幅画学习风格,去画另一幅画
1. 用python做数字油画 模块: pillow 2. 从一幅画学习风格,去画另一幅画 http://pytorch.org/tutorials/advanced/neural_style_tut ...
- WEB打印大全
1.控制"纵打". 横打”和“页面的边距. (1)<script defer> function SetPrintSettings() { // -- advance ...
- ie7/8浏览器报错:对象不支持“trim”属性或方法
解决方法: 方法1: 使用jquery里面的全局函数$.trim()代替原生js方法trim(): $.trim( 你要替换的字符 ); 方法2: Function.prototype.method ...
- python shlex 模块
shkex 模块最常见的用法就是其中的split 函数,split 函数提供了和shell 处理命令行参数时一致的分隔方式 代码示例: shlex.split("python -u a.py ...
- Spring-core中的cglib小用法
对象复制听说用这个更高效 /** * 拷贝对象 * @param src 源对象 * @param dist 需要赋值的对象 */ public static void copy(Object src ...
- u3d加载外部视屏
u3d的外部加载视屏,采用www方式,可以使用gui播放,也可以绑定到gameobject上作为动态材质使用,不过目前只支持.ogg格式,需要转... using UnityEngine;using ...