1. 程式人生 > >龍芯玲瓏cpp、cc1、as、ld工具編譯main,無gcc編譯完整過程

龍芯玲瓏cpp、cc1、as、ld工具編譯main,無gcc編譯完整過程

網上折騰了好久,終於把這個原始而古老的編譯方法挖掘出來了。由於現在新的linux系統都有非常成熟的gcc工具,其預處理、編譯、彙編、連結過程都全自動完成了,所以幾乎完全搜不到相關資料。值得一提的是,cpp這個工具的名稱,跟C++原始檔字尾是一樣的,搜出來居然是各種gcc、g++編譯教程,真是哭笑不得。

run.c源程式:

#include<stdio.h>

int main(){
    printf("\nHello World!\n");
    int a=5;
    return a+3;
}

【第一步】預處理命令(用於檢查c檔案是否合法):

cpp run.c

【第二步】編譯命令,將c程式碼編譯成彙編程式碼(裝的cc1可執行檔案沒有新增到環境變數,因此使用全路徑):

/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系統下執行的可執行檔案:

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

第四步連結的時候需要注意的問題:

1、龍芯玲瓏系統可能沒有自帶用mips指令集編譯好的庫檔案,需要從交叉編譯工具集導進來:下載頁面下載地址,下載完後將工具集安裝在/opt/下

2、/opt/gcc-4.3-ls232/sysroot/usr/lib/libc_nonshared.a /us