Linux下编译链接出错

liu_Dylan 2016-08-31 05:47:28
现在在Ubuntu16.04版本下,64位系统的虚拟机上下有两段很简单的代码
//file1.c
#include<stdio.h>
void main()
{
printf("this is file1.c");
fun();
}
//file2.c
#include<stdio.h>
void fun(void)
{
printf("this is file2.c");
}
然后链接编译出现问题,问题描述如下:
$gcc -c file1.c file2.c
$gcc -O file file1.o file2.o(o大写)
运行成功,生成可执行文件,并正确运行,但是:
$gcc -c file1.c file2.c
$gcc -o file file1.o file2.o(o小写)
报错无法生成可执行文件错误如下:
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

现在更奇怪的的来了,同事有装同样版本的Ubuntu,问题刚好和我相反。
即是在上面链接的时候小写O能生成可执行文件,成功运行,但是大写的时候报错。

我知道Linux的命令是分大小写的,但为什么会出现这样的问题,求大神指教,谢谢。
...全文
367 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hijack00 2016-09-01
  • 打赏
  • 举报
回复
楼主描述的这个问题听起来感觉好奇葩。一般来说,gcc的-o(小写)是用来指定输出文件名称的,后面必须要接一个参数。而-O(大写)是用来指定优化级别的,有0-3四级,这个选项的参数是可选的。
liu_Dylan 2016-09-01
  • 打赏
  • 举报
回复
引用 1 楼 h2plus0 的回复:
在14.04下面, gcc -O file file1.o file2.o 运行错误: gcc: error: file: No such file or directory 使用 gcc -o file file1.o file2.o 可以成功 gcc版本问题? gcc --version gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
关键是我同事和我用的是同一版本 结果恰好相反,这让我很郁闷。。。。。
h2plus0 2016-09-01
  • 打赏
  • 举报
回复
在14.04下面, gcc -O file file1.o file2.o 运行错误: gcc: error: file: No such file or directory 使用 gcc -o file file1.o file2.o 可以成功 gcc版本问题? gcc --version gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
奔跑的码仔 2016-09-01
  • 打赏
  • 举报
回复
首先建议楼主先搞清楚-o和-O的含义。至于上述链接时的问题,因为是静态链接,所以目标文件的排列顺序是有要求的,所以应该互换file1.o和file2.o的位置

19,613

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧