gcc编译流程,交叉编译
- gcc编译过程:
- 预编译:gcc -E c源文件 -o 输出i目标文件;
- 编译阶段:gcc -S i源文件 -o 输出s目标文件;
- 汇编阶段:gcc -c s源文件 -o 输出o目标文件;
- 链接阶段:gcc o源文件 -o 输出可执行文件;
- gcc编译实例:
- gcc -g -Wall c源文件 -o 输出可执行文件;(-g表示在生成的目标文件中带调试信息,-Wall表示开启编译器常用的警告,-W不开启警告)
- gcc -g -Wall c源文件 -lm -o 输出可执行文件;(-lm表示链接外部库)
- 交叉编译:
- arm-linux-gcc -g c源文件 -o 生成目标文件;
- 产生问题: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 - 解决办法:使用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权限的操作了。