龙芯玲珑cpp、cc一、as、ld工具编译main,无gcc编译完整过程

网上折腾了很久,终于把这个原始而古老的编译方法挖掘出来了。因为如今新的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

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

相关文章
相关标签/搜索