目前共有9篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:不轉換▼
 
點擊 回復
36 8
在fedora42上用arm-gnu-toolchain-14.2交叉编译器编译gcc14.2、gdb14.2和make4.4
一派掌門 二十級
1樓 發表于:2025-6-23 18:24
export PATH=$PATH:/home/oct1158/Downloads/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf/bin

【在电脑上交叉编译gcc14.2】(虚拟机系统为fedora42)
cd ~/Downloads
wget https://mirror.marwan.ma/gcc/releases/gcc-14.2.0/gcc-14.2.0.tar.gz
mkdir gcc
cd gcc
tar xzf ../gcc-14.2.0.tar.gz
cd gcc-14.2.0
contrib/download_prerequisites
(执行这条命令要很长时间,因为这个脚本要从网上下载5个压缩包,可以新开一个窗口在gcc-14.2.0目录下执行ls -l *.tar.*看看下载进度)
cd ..
mkdir _build
cd _build
../gcc-14.2.0/configure --host=arm-none-linux-gnueabihf --target=arm-none-linux-gnueabihf --with-bugurl="https://bugs.linaro.org/" --enable-shared --disable-libssp --disable-libmudflap --enable-checking=yes --enable-languages=c,c++,fortran --with-arch=armv7-a --with-fpu=neon --with-float=hard --with-mode=thumb --disable-werror
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar czf gcc-14.2.0-binary.tar.gz usr
mv gcc-14.2.0-binary.tar.gz /var/www/html/oct1158

【在电脑上交叉编译binutils2.44】
(在XP系统下,用firefox52.9esr浏览器和chrome49浏览器访问https://www.gnu.org/software/binutils/,提示Too Many Requests,但是用Supermium124浏览器却能正常访问)
cd ~/Downloads
wget https://ftp.gnu.org/gnu/binutils/binutils-2.44.tar.gz
tar xf binutils-2.44.tar.gz
cd binutils-2.44
./configure --host=arm-none-linux-gnueabihf
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar czf binutils-2.44-binary.tar.gz usr
mv binutils-2.44-binary.tar.gz /var/www/html/oct1158

【在电脑上交叉编译make4.4】
cd ~/Downloads
wget https://ftp.gnu.org/gnu/make/make-4.4.tar.gz
tar xf make-4.4.tar.gz
cd make-4.4
./configure --host=arm-none-linux-gnueabihf
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar czf make-4.4-binary.tar.gz usr
mv make-4.4-binary.tar.gz /var/www/html/oct1158

【在电脑上交叉编译ncurses6.5】
cd ~/Downloads
wget https://ftp.gnu.org/gnu/ncurses/ncurses-6.5.tar.gz
tar xf ncurses-6.5.tar.gz
cd ncurses-6.5
./configure --host=arm-none-linux-gnueabihf --with-shared
make
修改progs/Makefile文件里面第82行的INSTALL_PROG变量,在变量值的末尾添加
--strip-program=arm-none-linux-gnueabihf-strip
然后make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar czf ncurses-6.5-binary.tar.gz usr
mv ncurses-6.5-binary.tar.gz /var/www/html/oct1158

【在电脑上交叉编译gdb14.2】
cd ~/Downloads
wget https://ftp.gnu.org/gnu/gdb/gdb-14.2.tar.gz
mkdir gdb
cd gdb
tar xf ../gcc/gcc-14.2.0/gmp-6.2.1.tar.bz2
cd gmp-6.2.1
./configure --host=arm-none-linux-gnueabihf --enable-shared=no
make
make install DESTDIR=$(pwd)/_install

cd ..
tar xf ../gcc/gcc-14.2.0/mpfr-4.1.0.tar.bz2
cd mpfr-4.1.0
./configure --host=arm-none-linux-gnueabihf --with-gmp=../gmp-6.2.1/_install/usr/local --enable-shared=no
make
make install DESTDIR=$(pwd)/_install

修改_install/usr/local/lib/libmpfr.la文件,第20行
dependency_libs=' -L/home/oct1158/Downloads/gdb/gmp-6.2.1/_install/usr/local/lib /usr/local/lib/libgmp.la'
改成
dependency_libs=' -L/home/oct1158/Downloads/gdb/gmp-6.2.1/_install/usr/local/lib'
以免后面报libtool: link: cannot find the library `/usr/local/lib/libgmp.la' or unhandled argument `/usr/local/lib/libgmp.la'的错误

cd ..
tar xf ../gdb-14.2.tar.gz
mkdir _build
cd _build
../gdb-14.2/configure --host=arm-none-linux-gnueabihf --target=arm-none-linux-gnueabihf --enable-64-bit-bfd --enable-targets=arm-none-eabi,arm-none-linux-gnueabihf,armeb-none-eabi,armeb-none-linux-gnueabihf --with-bugurl="https://bugs.linaro.org/" --enable-initfini-array --enable-plugins --enable-tui --disable-binutils --disable-sim --disable-as --disable-ld --disable-doc --disable-gdbtk --disable-nls --disable-werror --without-x --with-gmp=$(pwd)/../gmp-6.2.1/_install/usr/local --with-mpfr=$(pwd)/../mpfr-4.1.0/_install/usr/local
make CFLAGS="-I$(pwd)/../../ncurses-6.5/_install/usr/include" CPPFLAGS="-I$(pwd)/../../ncurses-6.5/_install/usr/include" LDFLAGS="-L$(pwd)/../../ncurses-6.5/_install/usr/lib"
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar czf gdb-14.2-binary.tar.gz usr
mv gdb-14.2-binary.tar.gz /var/www/html/oct1158

【在电脑上交叉编译file5.46】
cd ~/Downloads
wget https://www.astron.com/pub/file/file-5.46.tar.gz
tar xf file-5.46.tar.gz
cd file-5.46
./configure --host=arm-none-linux-gnueabihf
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar czf file-5.46-binary.tar.gz usr
mv file-5.46-binary.tar.gz /var/www/html/oct1158

【在电脑上交叉编译findutils4.10(里面有locate命令)】
cd ~/Downloads
wget https://ftp.gnu.org/gnu/findutils/findutils-4.10.0.tar.xz
tar xf findutils-4.10.0.tar.xz
cd findutils-4.10.0
./configure --host=arm-none-linux-gnueabihf
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar czf findutils-4.10.0-binary.tar.gz usr
mv findutils-4.10.0-binary.tar.gz /var/www/html/oct1158

【安装到板子上】
cd /mnt/sdfat
wget https://192.168.4.42/oct1158/gcc-14.2.0-binary.tar.gz --no-check-certificate
tar xzf gcc-14.2.0-binary.tar.gz -C /
wget https://192.168.4.42/oct1158/binutils-2.44-binary.tar.gz --no-check-certificate
tar xzf binutils-2.44-binary.tar.gz -C /
wget https://192.168.4.42/oct1158/make-4.4-binary.tar.gz --no-check-certificate
tar xzf make-4.4-binary.tar.gz -C /
wget https://192.168.4.42/oct1158/ncurses-6.5-binary.tar.gz --no-check-certificate
tar xzf ncurses-6.5-binary.tar.gz -C /
wget https://192.168.4.42/oct1158/gdb-14.2-binary.tar.gz --no-check-certificate
tar xzf gdb-14.2-binary.tar.gz -C /
wget https://192.168.4.42/oct1158/file-5.46-binary.tar.gz --no-check-certificate
tar xzf file-5.46-binary.tar.gz -C /
wget https://192.168.4.42/oct1158/findutils-4.10.0-binary.tar.gz --no-check-certificate
tar xzf findutils-4.10.0-binary.tar.gz -C /

ldconfig
updatedb
一派掌門 二十級
2樓 發表于:2025-6-23 18:55
【测试gcc编译环境】
mkdir -p ~/test/ngroups_max
cd ~/test/ngroups_max

vi ngroups_max.c
*******文件内容开始*******
#include <limits.h>
#include <stdio.h>

int main(void)
{
        printf("NGROUPS_MAX=%d\n", NGROUPS_MAX);
        printf("MB_LEN_MAX=%d\n", MB_LEN_MAX);
        return 0;
}
*******文件内容结束*******

echo "all: ngroups_max" > Makefile
make CC=gcc C_INCLUDE_PATH=/usr/include
./ngroups_max
要看到输出
NGROUPS_MAX=65536
MB_LEN_MAX=16
才对。
如果编译时提示ngroups_max.c:6:36: error: 'NGROUPS_MAX' undeclared (first use in this function),或者运行时输出MB_LEN_MAX=1,那就是没设置好C_INCLUDE_PATH环境变量。

vi /etc/profile
添加
export CC=gcc
export CXX=g++
export C_INCLUDE_PATH=/usr/include
保存文件后exit下再回车,重新进入命令行。
 
巨大八爪鱼:[root@luckfox-rv1106 ~/software/sudo-1.9.16p2]# ls -l $(find /usr -name limits.h
)
-rw-r--r--    1 root     root          5706 Jun 23 02:24 /usr/include/limits.h
-rw-r--r--    1 root     root           937 Jun 23 02:24 /usr/include/linux/limits.h
-rw-r--r--    1 root     root          1256 Jun 23 02:18 /usr/local/include/c++/14.2.0/tr1/limits.h
-rw-r--r--    1 root     root          4826 Jun 23 01:47 /usr/local/lib/gcc/arm-none-linux-gnueabihf/14.2.0/include/limits.h
-rw-r--r--    1 root     root          4826 Jun 23 02:17 /usr/local/lib/gcc/arm-none-linux-gnueabihf/14.2.0/install-tools/include/limits.h
[root@luckfox-rv1106 ~/software/sudo-1.9.16p2]#

如果不设置C_INCLUDE_PATH=/usr/include的话,#include <limits.h>包含的是/usr/local/lib/gcc/arm-none-linux-gnueabihf/14.2.0/include/limits.h这个文件,里面#define MB_LEN_MAX 1,会导致很多软件包无法正常编译。
  2025-6-23 19:40 回復
一派掌門 二十級
3樓 發表于:2025-6-23 19:25
gcc-14.2.0.tar.gz       01-Aug-2024 08:51
binutils-2.44.tar.gz    2025-02-02 07:29(目前最新版本)
make-4.4.tar.gz            2022-10-31 02:49
ncurses-6.5.tar.gz      2024-04-27 17:39(目前最新版本)
gdb-14.2.tar.gz         2024-03-03 01:18
file-5.46.tar.gz        2024-11-27 15:43(目前最新版本)
findutils-4.10.0.tar.xz 2024-06-01 12:32(目前最新版本)
 
一派掌門 二十級
4樓 發表于:2025-6-23 19:26
【在板子上本地编译安装sudo命令】
(编译前一定要确保系统里面设置了C_INCLUDE_PATH环境变量,不然编译会出错)
cd ~
mkdir software
cd software
wget https://www.sudo.ws/dist/sudo-1.9.16p2.tar.gz --no-check-certificate
tar xf sudo-1.9.16p2.tar.gz
cd sudo-1.9.16p2
./configure
make
make install
 
巨大八爪鱼:[oct1158@luckfox-rv1106 ~]$ passwd
passwd: must be suid to work properly
[oct1158@luckfox-rv1106 ~]$ su
su: must be suid to work properly

解决passwd和su命令无法使用的问题:
[root@luckfox-rv1106 ~/software/sudo-1.9.16p2]# ls -l /bin/busybox
-rwxr-xr-x    1 root     root       1385804 Jun 18 08:37 /bin/busybox
[root@luckfox-rv1106 ~/software/sudo-1.9.16p2]# chmod 4755 /bin/busybox
[root@luckfox-rv1106 ~/software/sudo-1.9.16p2]# ls -l /bin/busybox
-rwsr-xr-x    1 root     root       1385804 Jun 18 08:37 /bin/busybox
[root@luckfox-rv1106 ~/software/sudo-1.9.16p2]#
  2025-6-23 19:32 回復
巨大八爪鱼:目前sudo无法正常使用,输入正确的密码也提示Sorry, try again.,正在想办法解决中。
  2025-6-23 19:38 回復
一派掌門 二十級
5樓 發表于:2025-6-24 09:59
【查看glibc版本】

#include <stdio.h>
#include <gnu/libc-version.h>

int main() {
printf("glibc version: %s\n", gnu_get_libc_version());
return 0;
}

输出:glibc version: 2.40

 
巨大八爪鱼

arm官网的arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf交叉编译器的glibc版本是2.40。

fedora42虚拟机里面的glibc版本是2.41。
  2025-6-24 10:02 回復

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:36 回複數:8
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2025-6-24 10:02
 
©2010-2025 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。