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,接下来我就不多说了。自己发挥吧!!!!!

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