msgpack在linux下编译的c库

                     msgpack linux下编译出C库和example的例程

一、源码和过程:


### Building and Installing

#### Install from git repository

##### Using the Terminal (CLI)

You will need:

 - `gcc >= 4.1.0`
 - `cmake >= 2.8.0`

How to build:

    $ git clone https://github.com/msgpack/msgpack-c.git
    $ cd msgpack-c
    $ git checkout c_master
    $ cmake .
    $ make
    $ sudo make install

核心压缩方式可参看官方说明messagepack specification

二、编译出现的错误

编译出现的问题解决:
问题出现主要是在cmake . 这个步骤
重新编译的cmake .的时候,要先把上次的缓存删除CMakeCache.txt,可以直接建一个build文件夹在这个文件夹里面编译
问题基本是缺少对应的库文件
1.-- Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)
方法:
sudo apt-get install libgtest-dev
sudo apt-get install cmake # install cmake
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
#copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
sudo cp *.a /usr/lib
2.-- Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
方法:
sudo apt-get install zlib1g zlib1g-dev
3.CMake Warning at example/CMakeLists.txt:1 (FIND_PACKAGE):
  By not providing "FindcJSON.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "cJSON", but
  CMake did not find one.

  Could not find a package configuration file provided by "cJSON" with any of
  the following names:

    cJSONConfig.cmake
    cjson-config.cmake

  Add the installation prefix of "cJSON" to CMAKE_PREFIX_PATH or set
  "cJSON_DIR" to a directory containing one of the above files.  If "cJSON"
  provides a separate development package or SDK, be sure it has been
  installed.

方法:
1).下载cjson地址  https://sourceforge.net/projects/cjson/?source=directory
2).在msgpack-c 下建立cjson目录
3).直接拷贝cJSON.c cJSON.h到msgpack-c 下cjson目录
4).编译对应的libcJSON.so 动态库
gcc cJSON.c  -fPIC -lm -shared -o libcJSON.so 
注意,如果没有加上-lm会出现下面错误

/home/hhjian/Desktop/work/msgpack/msgpack-c/cjson/libcJSON.so: undefined reference to `pow'
/home/hhjian/Desktop/work/msgpack/msgpack-c/cjson/libcJSON.so: undefined reference to `floor'
collect2: error: ld returned 1 exit status
example/CMakeFiles/jsonconv.dir/build.make:96: recipe for target 'example/jsonconv' failed
make[2]: *** [example/jsonconv] Error 1
CMakeFiles/Makefile2:1310: recipe for target 'example/CMakeFiles/jsonconv.dir/all' failed
make[1]: *** [example/CMakeFiles/jsonconv.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

原因:cjson 使用了#include <math.h>,编译的时候加上-lm
5).编译FindcJSON模块在cjson 目录建立一个文件FindcJSON.cmake
内容为:
FIND_PATH(CJSON_INCLUDE_DIRS cJSON.h 对应的目录/msgpack-c/cjson)

FIND_LIBRARY(CJSON_LIBRARIES  libcJSON.so  对应的目录/msgpack-c/cjson/)

IF(CJSON_INCLUDE_DIRS AND CJSON_LIBRARIES)
    SET(cJSON_FOUND TRUE)
ENDIF(CJSON_INCLUDE_DIRS AND CJSON_LIBRARIES)
IF(cJSON_FOUND)
    IF(NOT cJSON_FIND_QUIETLY)
        MESSAGE(STATUS"Found cjson: ${CJSON_LIBRARIES}")
    ENDIF(NOT cJSON_FIND_QUIETLY)
ELSE(cJSON_FOUND)
    IF(cJSON_FIND_REQUIRED)
        MESSAGE(FATAL_ERROR"Could not find hello library")
    ENDIF(cJSON_FIND_REQUIRED)
ENDIF(cJSON_FOUND)

6).添加FindcJSON模块

在msgpack-c 下的CMakeList.txt添加


7).修改example/jsonconv.c
#include <cjson/cJSON.h>  修改为  #include <../cjson/cJSON.h>
注释掉
    //case cJSON_Invalid:
    //    return -1;
8).重新编译

4.
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
方法:
sudo apt-get install doxygen

三、编译成功

编译成功后,在example下对应例子都编译成功了

msgapck-c 对应的库

对应的magpck完整c源码在src和include文件夹,可以直接拿出来移植到不用的平台

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值