linux下的.o文件是不是分可执行的.o还有obj类型的.o??望求解!谢谢各位大侠!

是这样的我用“gcc-ohelloworld.ohelloworld.c”生成的helloworld.o文件和用makefile生成的helloworld.o貌似不是一个... 是这样的 我用“gcc -o helloworld.o helloworld.c” 生成的helloworld.o文件 和用makefile生成的helloworld.o貌似不是一个东西,makefile生成的.o文件不是可执行文件,而是类似obj那种目标文件,这两个.o一个能运行 一个不能运行,我就不是太明白,是不是gcc生成的.o文件其实不是obj文件,还是可执行文件?
makefile如下:CC=gcc
EXEC=hello
OBJS=hello.o
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) -o $@ $(OBJS)
clean:
-rm -f $(EXEC)*.o
可是我用命令生成的那个.o文件是可以运行的文件啊 是不是这个.o不算是obj文件 而是可执行文件?
他是不是和makefile生成的那个obj文件不是一个意思?

“你用命令生成的helloworld.o是-o参数的值”这句话不是太明白。。。呵呵
谢谢啦
展开
 我来答
shibixiao
2011-08-11 · TA获得超过599个赞
知道小有建树答主
回答量:673
采纳率:0%
帮助的人:500万
展开全部
你用makefile生成的.o实际上不是用参数-o带出来的,你用命令生成的helloworld.o是-o参数的值。很明显你后面makefile最后执行的是gcc -o hello hello.o, 两个命令不一样的。
追问
这样啊 可是我试了下gcc -o hello hello.o 显示的是:
/usr/bin/ld: hello.o: Relocations in generic ELF (EM: 40)
hello.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
没法生成hello文件。

“你用命令生成的helloworld.o是-o参数的值。”这句话啥意思?是不是我用gcc命令生成的那个.o文件不是真正的obj文件?
追答
简单一点说生成可执行文件有两种方法
gcc -o hello hello.c
这个是直接生成了可执行文件

gcc -c hello.o hello.c
gcc -o hello hello.o
这个是先生成object文件,然后再生成可执行的文件
因为你这个只有一个.c, 如果有多个文件,其中只有一个是有main函数的,那么可以先生成每个.c对应的.o文件,再最后生成要执行的一个文件。用-o的时候一定要有一个main函数
百度网友bc0922e
2011-08-11
知道答主
回答量:64
采纳率:0%
帮助的人:62.7万
展开全部
gcc -o helloworld.o helloworld.c
这句命令其实生成就是把helloworld.c编译链接生成可执行文件放到helloworld.o文件里面,你把helloworld.o写成helloworld.a,helloworld.b什么的都可以,反正是个可执行文件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
noodlest
2011-08-11 · TA获得超过785个赞
知道小有建树答主
回答量:724
采纳率:100%
帮助的人:723万
展开全部
1linux中文件是否能够运行不是由扩展名决定的,而是由是否有执行权限来决定的。
与windows不一样。
执行gcc -o helloworld.o helloworld.c后,gcc为helloworld.o赋予了执行权限,所以能运行。
2、惯例是可执行文件不带扩展名:
gcc -o helloworld helloworld.c
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式