在CentOS7上编译Ralink SDK 64-bit工具链

本来要编译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工具链

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top