bitstream.h
,其中包含结构和函数声明,以及实现代码的bitstream.c
。现在我想在其他程序中使用它,但是不想每次手动编译bitstream.c
,就像你使用stdio.h
时不必每次都编译一样,但我做不到。我的文件如下:
bitstream.c
#include "bitstream.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
bit_stream_t *fbit_stream(const char *path) {
FILE *f;
/* open file for reading */
f = fopen(path, "rb");
...
bitstream.h
#ifndef BITSTREAM_H
#define BITSTREAM_H
#define EOS 0x0a
typedef struct {
int size;
int i_byte;
unsigned char i_bit;
unsigned char current_bit;
unsigned char *bytes;
} bit_stream_t;
extern bit_stream_t *fbit_stream(const char *path);
extern unsigned char bit_stream_next(bit_stream_t *bs);
extern void bit_stream_close(bit_stream_t *bs);
extern void print_bit_stream(bit_stream_t *bs);
#endif
我将这两个文件放入 /usr/local/include
中(我在 Linux 机器上),现在我想在 main.c
中使用它(在其他地方,例如 /home/foo/main.c
):
main.c
#include <bitstream.h>
#include <stdio.h>
int main(int argc, const char *argv[]) {
if (argc != 2) {
printf("Need 1 argument!\n");
return 1;
}
bit_stream_t *my_bs;
my_bs = fbit_stream(argv[1]);
while (my_bs -> current_bit != EOS) {
printf("%d", my_bs -> current_bit);
bit_stream_next(my_bs);
}
bit_stream_close(my_bs);
printf("\n");
return 0;
}
当我尝试使用 gcc -Wall -o main.o main.c
时,我会得到以下结果:
/tmp/ccgdq66W.o: In function `main':
main.c:(.text+0x35): Undefined reference to `fbit_stream'
main.c:(.text+0x63): Undefined reference to `bit_stream_next'
main.c:(.text+0x7b): Undefined reference to `bit_stream_close'
collect2: error: ld returned 1 exit status
我做错了什么? 预先感谢任何帮助!
smuecke
stdio
不仅仅是一个头文件。请查看Lie Ryan的回答。我希望这能帮到你。 - Missu