端午节放假三天,结果妹子的公司上周末照常放假不调休,周一周二正常上班,周三再放一天假。如此人性化的公司着实少见,只是苦了俺周一周二又寂寞空虚冷了。
反正闲着也是闲着,就搞了一下想搞很久的在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,接下来我就不多说了。自己发挥吧!!!!!
写起来很简单的东西,我居然搞了两天,诶……