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經過靜態編譯後,可在安卓平台藉助終端模擬器直接運行,但功能上會有所缺失。
