linux64位编译
一、交叉编译工具链的安装
安装交叉编译工具链主要包含几个步骤:下载源码、安装编译依赖、编译工具链、配置路径。确保下载所有子模块使用--recursive选项。安装编译所需的工具如:gcc、binutils等。编译支持32位和64位系统的交叉编译工具链,最终安装于/opt/riscv目录,前缀为riscv64-unknown-linux-gnu-,兼容两种位数系统。
二、编译Linux内核
下载Linux 5.2.4源码,配置RISC-V内核选项,将defconfig拷贝到.config文件,直接保存退出,使用默认配置。编译时,添加CROSS_COMPILE=riscv64-unknown-linux-gnu-选项。编译完成后,在arch/riscv/boot目录下找到内核镜像,分别为Image和Image.gz。
三、根文件系统制作
下载BusyBox源码,选择静态编译方式,修改配置以满足RISC-V环境需求。进入目录,创建常见文件夹,复制BusyBox生成的文件至指定路径。修改fstab>文件配置,调整init.d/rcS>文件以优化系统启动。完成rootfs.img卸载后,根文件系统镜像文件rootfs.img制作完成。
四、QEMU模拟器运行Linux内核
获取QEMU模拟器,选择对应操作系统版本的下载链接。运行Linux内核,观察运行结果。至此,完成了内核配置、编译、文件系统编译及Linux系统运行的全过程。
结语
通过以上步骤,实现了使用RISC-V架构编译、运行Linux内核的全过程。具体实践过程中,可能会遇到权限问题,需要适当调整,确保操作顺利进行。
B. 如何用GCC编译64位linux程序
在64位的linux下编译就行,和32位的编译是一样的
gcc -Wall a.c -o a
有Makefile就直接make
C. 64位linux下的GCC如何编译出一个32位可执行程序
理论上安装支持环境,之后 64 位的 gcc 编译成 32 位程序,就加 -m32 参数即可。
当然还一个办法是装个 32 位的 gcc 。
另外,交叉编译也适用于 x86 架构。
不过这么编译经常会出现各种问题,所以编译 32 位的程序,最好还是用 32 位系统。
不一定重装,用 chroot 和 setarch 命令配合即可弄出一个 32 位的子系统。
D. linux64位机器编译32位程序出现错误。
32 和 64 是完全两个不同的系统。Linux 他们的兼容,完全是基于内核的双模式切换功能,但是因为是基于内核的。所以 32 和 64 的系统函数库就还是没关系。
那么,你编译和运行 32 位程序,就需要 64 位的函数库接口支撑。同样 64 位程序,也需要 64 位的函数库提供支撑。
你这个问题,教程只让你装了最基本的编译器环境,但是函数支撑环境全都没有装,肯定是还会提示找不到需要的函数库的。
另外,就算你这个命令装了需要的函数库,也肯定只是装了 64 位的函数库,32 位库也没有装。那么编译 32 位程序也会出现找不到 32 位函数库的问题的。
你这个问题,我建议你学习两部分:
1、Linux 的依赖关系;
2、Linux 的 mutilib 相关实现。
我建议,编译 32 的程序请用纯 32 位系统。64 位系统只编译 64 位的程序。64 位系统只可以运行 32 位程序,不要用来编译。Linux 里面随便找个程序,就会依赖很多的函数库,这对于编译器调用来说,会很乱的。
如果真的没有空闲机器去单独跑 32 位系统了,我建议要么是 chroot 环境,要么是用交叉编译。不过注意这两种方式还是需要设置。
E. 一文了解riscv软件系列之linux内核编译运行
本文详述了如何在RISC-V架构下编译和运行Linux内核的过程,包括交叉编译工具链的安装和配置,Linux内核的编译,以及根文件系统制作和qemu模拟器的使用。首先,要安装交叉编译工具链,可通过源码编译或使用Sifive提供的预编译版本。工具链安装后,配置Linux内核时,选择riscv 64位系统配置,并在编译时指定CROSS_COMPILE变量。接着,制作BusyBox根文件系统,静态链接可执行文件,再通过qemu模拟器运行编译后的Linux内核。最后,通过Windows或Linux版本的qemu,成功模拟了Linux系统的运行。整个流程包括内核配置、编译、文件系统构建和虚拟机启动,实现了对RISC-V架构下Linux内核的完整操作。
F. 64位linux下面的GCC如何编译出一个32位可执行程序
在64位Linux环境下,使用GCC编译32位可执行程序并不困难,但需要确保你的编译环境具备相应支持。默认安装的GCC编译器可能无法直接编译64位程序,因为缺少64位机器指令相关的文件,导致在编译过程中出现类似错误:
"In file included from /usr/include/features.h:378, from /usr/include/assert.h:37, from ../../../include/tinyxml/tinystr.h:42, from ../../../src/tinyxml/tinystr.cpp:32: /usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 没有那个文件或目录"
解决方法是安装gcc所有支持文件,通过命令“sudo apt-get install gcc-multilib”进行安装。安装过程中,系统会提示需要安装一系列额外的软件包,例如:
cpp-4.4, g++-4.4, gcc-4.4, gcc-4.4-base, gcc-4.4-multilib, lib64gcc1, lib64gomp1, libc6-amd64, libc6-dev-amd64, libgcc1, libgomp1, libstdc++6, libstdc++6-4.4-dev
安装这些软件包后,你可以通过在编译命令中加上-m32参数来指定编译32位程序。例如,使用“gcc -m32 -o myprogram myprogram.c”来编译32位程序。
需要注意的是,编译32位程序需要确保目标系统支持32位架构。如果你的目标系统是32位的Windows XP,你可以使用上述方法编译出能在32位系统上运行的程序;同样地,对于64位的Windows Vista、32位的Ubuntu和64位的Ubuntu,也可以编译相应的32位或64位程序。
然而,如果你在老师的题目中遇到困难,可能是因为具体的需求或条件未详细说明。建议与老师进一步沟通,了解具体的题目要求,以确保正确理解和执行任务。
G. 在64位linux下安装vsftpd,在vsftp-3.0.2文件夹进行编译时报错,哪位大侠帮帮我!谢谢
1、根据错误提示检查依赖的哪个包没有安装,缺什么补什么。
2、检查pam和pam-devel是否安装
rpm -qa|grep pam-
3、64位linux安装vsftp-3.0.2一般会遇到
/lib/libpam.so.0: could not read symbols: File in wrong format错误
vi 打开vsf_findlibs.sh,替换/lib/为/lib64/即可
:%s@\/lib\/@\/lib64\/@g
3、make;make install