本来要编译MariaDB的,结果使用Ralink的工具链,在链接uClibc++库的时候,因为没有-fPIC导致链接.a文件有异常。
因此只好自己来编译Ralink的工具链了。目前虚拟机使用的是CentOS 7.3.1611 64bit。
前期准备
由于Ralink的工具链比较早一些,而centos7带的一些可执行程序比较新。主要是make以及texinfo。make可以直接从Ubuntu上拷贝一个3.81版本,或者自己去下个3.81版本的编译。而texinfo则使用4.13版本,编译安装。安装后,先拷贝到自己的一个目录,比如~/bin
export PATH=~/bin:$PATH
将新编译的加入PATH,这样编译的时候,优先走自己编译的make以及texinfo。
gcc 4.6.3有个BUG,需要先打上补丁。
tar jxvf buildroot-gcc463-src.tar.bz2 cd buildroot-2012.11.1/dl tar jxvf gcc-4.6.3.tar.bz2 # 解压gcc 4.6.3 vim gcc-4.6.3/gcc/ira-int.h
补丁如下:
--- gcc-4.6.3-old/gcc/ira-int.h 2015-07-27 12:51:58.898656272 +0800 +++ gcc-4.6.3/gcc/ira-int.h 2015-07-27 12:53:33.644588455 +0800 @@ -1123,8 +1123,13 @@ ira_allocno_object_iter_cond (ira_allocno_object_iterator *i, ira_allocno_t a, ira_object_t *o) { - *o = ALLOCNO_OBJECT (a, i->n); - return i->n++ < ALLOCNO_NUM_OBJECTS (a); + int n = i->n++; + if (n < ALLOCNO_NUM_OBJECTS (a)) + { + *o = ALLOCNO_OBJECT (a, n); + return true; + } + return false; } /* Loop over all objects associated with allocno A. In each
重新打包gcc 4.6.3
rm gcc-4.6.3.tar.bz2 tar cjvf gcc-4.6.3.tar.bz2 gcc-4.6.3 cd ..
libstdc++编译开启-fPIC
要支持-fPIC的话,需要gcc的编译选项中添加–width-pic才行,具体make menuconfig如下:
或者直接修改.config文件:
BR2_EXTRA_GCC_CONFIG_OPTIONS="--with-pic"
开始编译
make V=1
如果没有修改menuconfig中的gcc输出路径,那么gcc路径默认/opt/buildroot-gcc463 成功后,则安装了新的工具链到该路径下。
支持ucontext
后续编译需要用到ucontext,参考了uClibc-ng以及github上的一个uClibc源码。给现有的工程打上补丁:
将uClibc clean掉,并重新make,开启:
ARCH_HAS_UCONTEXT=y UCLIBC_SUSV3_LEGACY=y UCLIBC_HAS_CONTEXT_FUNCS=y
这样uClibc就可以支持ucontext的相关函数了。
参考资料:
Ralink SDK 64-bit cross-compiler on Ubuntu 15.04
How do I compile gnu libstdc++.a with PIC?
转载请注明: 转载自elkPi.com
本文链接地址: 在CentOS7上编译Ralink SDK 64-bit工具链