本文基于问答整理:https://www.php.cn/link/9a1e6dff7dbc2da64a3577c8b9a24854
由于AW服务器上的make工具版本为3.8.1,与高版本glibc不兼容,因此需要更新make工具。如果服务器上的make版本较新,则无需更新。
访问 https://www.php.cn/link/25d116dc9e29065600cd84782e385de2 下载最新版本的make工具(如4.3版)。解压后,进入make-4.3源码目录,执行以下命令进行安装:
# prefix后面路径为make工具的安装路径,这里我们指定安装到out目录下。
./configure --prefix=${path}
make
make install
安装完成后,你将看到make工具更新到4.3版本。
从 https://www.php.cn/link/b7e898084c1ec0616b4b2f0cf14a758b 下载所需的glibc版本,确保gcc工具链和glibc版本匹配。
如下图所示,准备好编译脚本env.sh和glibc各版本源码。
env.sh脚本整合了所有编译步骤,你可以根据需要单独执行每条指令。
打开env.sh脚本。第4行指定gcc的位置,第5行指定make工具的位置(如果不需要高版本make,可以删除此行),第7行是glibc版本,第12行是glibc源码路径,第13行是glibc生成库文件路径,第14行是glibc编译过程产生的中间文件存放路径,第16行修改环境变量,使用我们自己的make和gcc工具。第30-33行用于编译glibc。
其中第31行 --host=arm-none-linux-gnueabihf,host的值需要与gcc匹配,否则会出错。

运行env.sh脚本:
./env.sh
注意观察信息,你会看到glibc生成准备环境时已经使用了我们指定的gcc工具链和make工具。

编译完成后,你将看到对应的so库文件。
替换glibc,例如在测试demo中,修改Makefile,指向我们编译的glibc版本路径。
重新编译,并查看执行文件,确认已使用相应版本的glibc库:
strings main | grep glibc
版本匹配问题:
- gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi版本可以编译glibc 2.29及以下版本。
- gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf版本目前仅在glibc 2.33版本下编译通过,其他版本需进一步测试。









