gcc编译流程,交叉编译

  1. gcc编译过程:
    1. 预编译:gcc -E c源文件 -o 输出i目标文件;
    2. 编译阶段:gcc -S i源文件 -o 输出s目标文件;
    3. 汇编阶段:gcc -c s源文件 -o 输出o目标文件;
    4. 链接阶段:gcc o源文件 -o 输出可执行文件;
  2. gcc编译实例:
    1. gcc -g -Wall c源文件 -o 输出可执行文件;(-g表示在生成的目标文件中带调试信息,-Wall表示开启编译器常用的警告,-W不开启警告)
    2. gcc -g -Wall c源文件 -lm -o 输出可执行文件;(-lm表示链接外部库)

  1. 交叉编译:
    1. arm-linux-gcc -g c源文件 -o 生成目标文件;
    2. 产生问题:arm-linux-gcc test.c -o test
      报错如下
      /usr/local/arm/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot open output file a.out: Permission denied
      collect2: ld returned 1 exit status
      我加上sudo arm-linux-gcc test.c -o test
      结果还是出错,出错信息如下
      sudo: arm-linux-gcc: command not found
    3. 解决办法:使用su获取root权限,而不改变工作环境;

                            XX:~$ sudo passwd root
                           [sudo] password for XX: 输入密码
                           确认:输入密码
                           再确认:输入密码
                           提示成功更新密码
                          此时,root用户已经启用。
                          进入root的操作如下:
                          XX:~$ su -root

                         密码:输入密码

                        这里说一下 su -root和su root的区别:

                        su  后面不加用户是默认切到 root
                        su  是不改变当前变量
                        su - 是改变为切换到用户的变量 
                        也就是说su只能获得root的执行权限,不能获得环境变量
                        而su -是切换到root并获得root的环境变量及执行权限,此时,已经可以进行root权限的操作了。

  

猜你喜欢

转载自blog.csdn.net/lx2385623371/article/details/81710641