是这样的 我用“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参数的值”这句话不是太明白。。。呵呵
谢谢啦
这样啊 可是我试了下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函数