链接到目标文件时出错

时间:2014-01-01 05:30:20

标签: c bash gcc

我有两个简单的源文件: 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工作正常吗?

2 个答案:

答案 0 :(得分:2)

gcc -o hello.o main.o表示:“通过链接后续文件(hello.o)”输出可执行文件main.o

gcc -o hello hello.o main.o表示:“通过关联后续文件(hellohello.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,最好是通过两个源文件使用的头文件。但是,这是一个改进,你可以在创建程序后修复它。