我有两个简单的源文件: main.c中
void main(){
print_hello();
}
的hello.c
#include<stdio.h>
void print_hello(){
printf("Hellow world \n");
}
使用bash命令编译后:
gcc -c hello.c
gcc -c main.c
没关系。当我们输入gcc -o hello.o main.o
错误时为什么会发生错误:
main.o
main.o: In function `main':
main.c:(.text+0x7): undefined reference to `print_hello'
collect2: error: ld returned 1 exit status
但是gcc -o hello hello.o main.o
工作正常吗?
答案 0 :(得分:2)
gcc -o hello.o main.o
表示:“通过链接后续文件(hello.o
)”输出可执行文件main.o
。
gcc -o hello hello.o main.o
表示:“通过关联后续文件(hello
和hello.o
)”输出可执行文件main.o
。
答案 1 :(得分:1)
麻烦的是你正试图从hello.o
创建一个名为main.o
的程序;幸运的是,它没有用。 -o
之后的参数是输出(程序)的名称。你需要使用类似的东西:
gcc -o hello hello.o main.o
或
gcc -o hello main.o hello.o
这些指定程序将被称为hello
并链接两个目标文件。或者,您可以运行:
gcc main.o hello.o
这将创建一个名为a.out
的程序。
严格来说,您应该在print_hello()
中声明main.c
,最好是通过两个源文件使用的头文件。但是,这是一个改进,你可以在创建程序后修复它。