我打算使用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的使用的更多相关文章

  1. 编码与模式------《Designing Data-Intensive Applications》读书笔记5

    进入到第四章了,本篇主要聊的点是编码(也就是序列化)与代码升级的一些场景,来梳理存储之中涉及到的编解码的流程.目前主流的编解码便是来自Apache的Avro,来自Facebook的Thrift与Goo ...

随机推荐

  1. ansible wc -l 对结果值取大小的操作

    [root@localhost ansible]# cat zss.yml - hosts: zss tasks: - name: step1 ping: - name: step2 install ...

  2. 【css】绝对定位的元素在 ie6 下不显示

    问题描述: 在 ie6 中如果一个浮动元素与绝对定位元素相邻的话,在某些情况下绝对定位元素将会消失. 产生原因: 只有当绝对定位元素的邻近浮动元素的宽度大于父层宽度减 3 时(即如果父层宽度是 300 ...

  3. altium designer 快捷键

    2010年03月27日 环境快捷键 F1 访问文档库 (in context with object under cursor) Ctrl + O 访问选择的文档打开对话框 Ctrl + F4 关闭活 ...

  4. SparkR初体验2.0

    突然有个想法,R只能处理百万级别的数据,如果R能运行在Spark上多好!搜了下发现13年SparkR这个项目就启动了,感谢美帝! 1.你肯定得先装个spark吧.看这:Spark本地模式与Spark ...

  5. TestNG 入门指导——理解testng.xml执行/不执行某个包,某个类,某个方法

    这一篇我们主要学习如下几个知识点: ⑴关于testng.xml ⑵创建一个测试套件 ⑶执行testng.xml ⑷在测试套件中创建多个测试用例 ⑸在用例中增加class,packages, metho ...

  6. python进行数据分析------相关分析

    相关分析 import statsmodels.api as sm import pandas as pd import numpy as np from patsy.highlevel import ...

  7. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  8. struts2系列(一):struts2入门(struts2的产生、struts2的工作流程、搭建struts2开发环境)

    一. struts2的产生 struts1的缺点:                         1. ActionForm过多,而且这个ActionForm在很大程度上又和VO(POJO)重复  ...

  9. ubuntu 安装 SVN 后的错误:Subversion Native Library Not Available & Incompatible JavaHL library loaded

    问题一 安装了SVN的eclipse插件,使用的时候就会弹出一个错误的提示框:  Subversion Native Library Not Available,加载不到JavaHL.   解决方法 ...

  10. 联想服务器X3650 M2 配置 RAID5 + 热备盘

    实验环境: 1.  服务器型号联想 System X3650 M2 2.  六块300G  SAS硬盘 实验目的: 配置RAID 5 ,搭建重要文件备份服务器. 标注:本教程六块硬盘,其中五块硬盘做R ...