網上折騰了很久,終於把這個原始而古老的編譯方法挖掘出來了。因爲如今新的linux系統都有很是成熟的gcc工具,其預處理、編譯、彙編、連接過程都全自動完成了,因此幾乎徹底搜不到相關資料。值得一提的是,cpp這個工具的名稱,跟C++源文件後綴是同樣的,搜出來竟然是各類gcc、g++編譯教程,真是啼笑皆非。php
run.c源程序:html
#include<stdio.h> int main(){ printf("\nHello World!\n"); int a=5; return a+3; }
【第一步】預處理命令(用於檢查c文件是否合法):linux
cpp run.c
【第二步】編譯命令,將c代碼編譯成彙編代碼(裝的cc1可執行文件沒有添加到環境變量,所以使用全路徑):bash
/usr/lib/gcc/mipsel-linux-gnu/4.3/cc1 -quiet -v run.c -quiet -dumpbase run.c -mabi=32 -mllsc -mno-shared -auxbase hello -version -o /tmp/ccLBiGXW.s
【第三步】彙編命令,將彙編代碼編譯成二進制字節碼:工具
as -EL -no-mdebug -mabi=32 -mno-shared -v -KPIC -o /tmp/ccalbwQH.o /tmp/ccLBiGXW.s
【第四步】連接命令,將程序所需的各類二進制代碼彙總,連接到一塊兒,輸出最終能在linux系統下執行的可執行文件:ui
ld --eh-frame-hdr -EL -dynamic-linker /lib/ld.so.1 -o hello_mips_test /opt/gcc-4.3-ls232/sysroot/usr/lib/crt1.o /opt/gcc-4.3-ls232/sysroot/usr/lib/crti.o /opt/gcc-4.3-ls232/lib/gcc/mipsel-linux/4.3.0/crtbegin.o -L/opt/gcc-4.3-ls232/lib/gcc/mipsel-linux/4.3.0 -L/opt/gcc-4.3-ls232/lib/gcc/mipsel-linux/4.3.0/../../../../mipsel-linux/lib -L/opt/gcc-4.3-ls232/sysroot/lib -L/opt/gcc-4.3-ls232/sysroot/usr/lib /tmp/ccalbwQH.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /opt/gcc-4.3-ls232/lib/gcc/mipsel-linux/4.3.0/crtend.o /opt/gcc-4.3-ls232/sysroot/usr/lib/crtn.o
第四步連接的時候須要注意的問題:debug
一、龍芯玲瓏系統可能沒有自帶用mips指令集編譯好的庫文件,須要從交叉編譯工具集導進來:下載頁面、下載地址,下載完後將工具集安裝在/opt/下code
二、/opt/gcc-4.3-ls232/sysroot/usr/lib/libc_nonshared.a /usr/lib/htm
參考:blog