zoukankan      html  css  js  c++  java
  • c++版本新浪微博sdk库交叉编译

    端午节放假三天,结果妹子的公司上周末照常放假不调休,周一周二正常上班,周三再放一天假。如此人性化的公司着实少见,只是苦了俺周一周二又寂寞空虚冷了。

    反正闲着也是闲着,就搞了一下想搞很久的在arm开发板上发微博这事。本来以为就是下载代码,交叉编译一下就ok了,很简单的事情,结果远没有想的这么简单,如果不是人品好,估计现在都还没有搞出来,渣浪果然是渣渣,名不虚传。那就记一下,也省的和后来人走弯路。

    “官方”的sdk,weibo-sdk(地址为 https://code.google.com/p/weibo-sdk )包含weibosdk和test二个项目。下载后为weibo-sdk-read-only目录。

    还有一个依赖库的weibo-sdk-util(地址为 https://code.google.com/p/weibo-sdk-util )包含cppunit,httpengine,libutil三个库,这些都是要用到的。下载后为weibo-sdk-util-read-only目录。

    光有这两个估计搞到湖南卫视开始放《还珠格格》主题曲都搞不出来,我的第一天就是在上面两个地址上下的源码编译的,结果HttpEngine死过编译不过,诶。

    我们还要下载另外一个整理过的sinaweibosdk,在此对作者表示强烈感谢!(地址为 https://code.google.com/p/sinaweibosdk-cb/),下载后为sinaweibosdk-cb-read-only目录。

    下载完成后,接下来,把sinaweibosdk-cb-read-only/3rdparty目录下的boost目录拷贝到weibo-sdk-util- read-only/include目录,因为后者的boost库的代码没上传全。还有sinaweibosdk-cb-read-only /project/HttpEngine这个目录也拷贝到weibo-sdk-util-read-only目录下替换HttpEngine目录,因为后 者的HttpEngine编译通不过,具体原因还没对比分析,可能代码是要改一下的。

    好了,有了上面三个库,代码也移动好了,然后还要交叉编译安装openssl和curl库和头文件到交叉编译工具的include和lib目录,这两个交叉编译比较简单,大组织出品,品质保证,这里就不细说了。这些都做完,准备工作就算完成了。

    (openssl和curl库编译:

    openssl:

    ./Configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/  \
    os/compiler:arm-linux-gcc

    libcurl:

    ./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/ \
    CC=arm-linux-gcc CXX=arm-linux-g++ \
    --host=arm-linux \
    ac_cv_func_malloc_0_nonnull=yes

    weibo-sdk-util-read-only目录里每个库(CppUnit HttpEngine libjson libutil)的子目录都有一个autogen.sh文件,改一下,把后面的./cofngiure --prefix的这个改成下面的这句

    ./configure \
    CC=arm-linux-gcc CXX=arm-linux-g++ \
    --host=arm-linux \
    ac_cv_func_realloc_0_nonnull=yes \
    ac_cv_func_malloc_0_nonnull=yes \
    --prefix=$(pwd)/.. \
    CPPFLAGS=-I/$(pwd)/../include

    接着还要改HttpEngine的src目录下的HESessionInfo.cxx文件,不然编译会出两个错误,如下:

    ./src/HESessionInfo.cxx: In member function 'void httpengine::HESessionInfo::appendCustomHeader(va_list)':
    ./src/HESessionInfo.cxx:435:7: error: could not convert 'arg' to 'bool'
    ./src/HESessionInfo.cxx:435:7: error: in argument to unary !
    ./src/HESessionInfo.cxx: At global scope:
    ./src/HESessionInfo.cxx:432:6: note: the mangling of 'va_list' has changed in GCC 4.4
    ./src/HESessionInfo.cxx: In member function 'void httpengine::HESessionInfo::appendPostForm(va_list)':
    ./src/HESessionInfo.cxx:475:7: error: could not convert 'arg' to 'bool'
    ./src/HESessionInfo.cxx:475:7: error: in argument to unary !
    ./src/HESessionInfo.cxx:496:14: warning: 'httpengine::PostFormType' is promoted to 'int' when passed through '...'
    ./src/HESessionInfo.cxx:496:14: note: (so you should pass 'int' not 'httpengine::PostFormType' to 'va_arg')
    ./src/HESessionInfo.cxx:496:14: note: if this code is reached, the program will abort
    我是直接把这两句代码注释了,改来改去也该不好,有c高手就来搞一下吧。

    这样就算改完了,回到weibo-sdk-util-read-only根目录,执行./autogen.sh,然后就慢慢等着依赖库编译好吧!编译有几个致命警告,暂时没有去仔细看会导致什么问题。

    编译完成后,把include目录和lib目录拷贝到weibo-sdk-read-only的third-party目录下,然后可以编译weibosdk了。

    weibo-sdk-read-only目录下已经有了configure.ac还有makefile.am,直接去weibo-sdk-util-read-only的HttpEngine目录下把autogen.sh拷过来修改一下就能用了,把

    --prefix=$(pwd)/.. \
    CPPFLAGS=-I/$(pwd)/../include

    改成

    --prefix=$(pwd) \
    CPPFLAGS=-I/$(pwd)/include

    就可以了。

    这样子交叉编译就算完成了。weibo-sdk-read-only目录下有个test目录,可以make(makefile里面的交叉编译器还有一些库的路径可能要改一下,这个太简单了,就不用我多说了)编译出一个test的测试可执行文件,放到板子上跑一下吧,不过这之前还得去新浪申请一个appkey,接下来我就不多说了。自己发挥吧!!!!!

    写起来很简单的东西,我居然搞了两天,诶……

  • 相关阅读:
    带宽利用率提升50%,腾讯云联网架构方案解析
    重构实践:基于腾讯云Elasticsearch搭建QQ邮箱全文检索
    存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?
    秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用
    降本提效,贝壳搜索推荐架构统一之路
    亿级用户,腾讯看点信息流推荐系统的架构挑战
    优秀程序员,如何提高架构能力?
    如何创建体元栅格?
    导出属性表字段结构
    去除镶嵌数据集中影像的黑边或白边
  • 原文地址:https://www.cnblogs.com/masky/p/3132905.html
Copyright © 2011-2022 走看看