网上折腾了好久,终于把这个原始而古老的编译方法挖掘出来了。由于现在新的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 /usr/lib/

参考:

预处理、编译、汇编、链接、启动代码、相关command

10-11 12:47