未定义的对<function name>的引用

use*_*893 16 c gcc header-files

我有这个简单的测试文件:

#include "stack.h"

int main()
{
  Stack* stck = init_stack();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

stack.h定义如下:

#ifndef STACK_H
#define STACK_H

#define EMPTY_STACK -1
typedef struct stack
{
  char ch;
  struct stack* prev;
} Stack;

extern Stack* init_stack();

extern char pop(Stack*);

extern void push(Stack*, char);

#endif
Run Code Online (Sandbox Code Playgroud)

这两个文件位于同一目录中.但是当我gcc ..构建它时,我不断收到以下错误:

$ ls
stack.c  stack.h  teststack.c
$ gcc -o testit teststack.c 
/tmp/ccdUD3B7.o: In function `main':
teststack.c:(.text+0xe): undefined reference to `init_stack'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里做错了什么?

谢谢,

Jon*_*ler 23

 gcc -o testit teststack.c stack.c
Run Code Online (Sandbox Code Playgroud)

您需要编译两个C源文件并链接目标文件; 这一切都在一个命令中完成.

  • (a)`#include"stack.h"`将`stack.h`中的信息复制到`teststack.c`文件中,给编译器提供有关函数的信息 - 但不给出它的定义.(b)不,您不需要在命令行中添加`stack.h`.两个源文件都将包含`stack.h`,因为源代码在编译真正开始之前已经过预处理. (4认同)