linux内核编译后能运行程序吗
1.不一定是升级。一般编译内核有升级某些特性修正一些bug,但是也有精简来适应自己的机子硬件。
2.编译成功后的内核与原来内核没有影响(除非将原来的覆盖),原来的内核最好保留,避免新内核运行不成功。
3.编译的新内核主要看你自己在config文件上的配置。
㈡ linux怎么运行c程序
CC是Linux操作系统下一个非常重要的源代码编译工具,有着许多重要的选项,支持许多不同语言的编译,如C、C++、Ada、Fortran、Objective、Perl、Python、Ruby以及Java等,甚至Linux的许多内核和许多其他自由软件以及开放源码应用程序都是用C语言编写并经gcc编译而成的.
1.编译单个源文件
[例如]在屏幕上打印"Hello,Linux."
[源代码]
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char **argv)
{
printf("Hello,Linux.\n");
exit(0);
}
将源文件保存为hello.c,开始进行编译
$gcc -o hello hello.c
编译成功完成后,在当前路径下,生成一个名为hello的文件,然后执行
$./hello
在屏幕上,你将会看到打印结果:Hello,Linux.
说明:在默认情况下,编译成功完成后,会在当前路径下,生成一个名为a.out的文件,然后执行$./a.out便可打印结果,但通常可以通过选项-o来指定自己的可执行程序名称;
2.编译多个源文件
3.使用外部函数库
4.使用共享函数库和静态函数库
5.gcc选项详细描述
1.7.2 gcc/egcs 的主要选项
表 1-3 gcc 命令的常用选项
选项 解释
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,
例如 asm 或 typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO 以字符串“1”定义 MACRO 宏。
-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。
-E 只运行 C 预编译器。
-g 生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
-m486 针对 486 进行代码优化。
-o FILE 生成指定的输出文件。用在生成可执行文件时。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
-shared 生成共享目标文件。通常用在建立共享库时。
-static 禁止使用共享连接。
-UMACRO 取消对 MACRO 宏的定义。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
㈢ 一文了解riscv软件系列之linux内核编译运行
一、交叉编译工具链的安装
安装交叉编译工具链主要包含几个步骤:下载源码、安装编译依赖、编译工具链、配置路径。确保下载所有子模块使用--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内核的全过程。具体实践过程中,可能会遇到权限问题,需要适当调整,确保操作顺利进行。
㈣ android为什么不直接执行linux的程序而是自己搞一套
安卓系统可以执行Linux程序,其基于Linux内核,底层实现依靠Linux ELF可执行文件。然而,安卓系统并不直接运行传统的基于glibc的Linux软件。
谷歌为了实现商业目的,移除了包括glibc在内的遵守(L)GPL许可的组件,自行开发了名为bionic的运行库。实际上,bionic库本质上是libc的一种实现,适用于手机等小型设备,且Android NDK亦使用bionic库进行编译。
此外,安卓系统本身的文件系统存在限制,同样限制了Linux软件的安装与使用。尽管如此,运行Linux软件仍有替代方案,例如Linux容器。通过Termux等软件,可以实现Linux软件的运行,其自带常见Linux软件,通过apt/pkg命令进行安装。
尽管Termux自带软件不够丰富,但chroot和proot等容器构建方案提供了更多可能性。利用这些方案,可以在安卓系统上运行Linux发行版,实现更丰富的功能,甚至运行Windows软件。
Linux容器存在一些局限性,如无法使用systemd(因无法确保init的PID为1)以及无法调用某些硬件。然而,可以通过曲线救国的方式解决这些问题,如通过x11转发实现画面输出,声音输入输出借助pulseaudio,GPU渲染借助virglrenderer(需挂载/tmp目录到termux的tmp目录)等。
理论上,静态编译的程序可在安卓平台直接使用,因为静态编译不依赖动态库,可独立运行。例如,qemu经过静态编译后,可在安卓平台借助终端模拟器直接运行,但功能上会有所缺失。
