在“my_header.h”中我定义了
FILE *f;
char *logfile = "my_output.txt";
#define OPEN_LOG f = fopen(logfile, "a")
#define CLOSE_LOG fclose(f)
在“my_source.c”中,我以这种方式使用它
#include "my_header.h"
....
OPEN_LOG;
fprintf(f, "some strings\n");
CLOSE_LOG;
然而,链接器说
my_source.o:(.data+0x0): multiple definition of `logfile'
我该如何解决?
答案 0 :(得分:5)
与往常一样,不要在头文件中定义变量。因为每次#include
该头文件时,该变量都将被重新定义(请记住#include
==“复制并粘贴”,有效),导致您看到的链接器错误。
答案 1 :(得分:2)
你应该创建一个新文件(my_stuff.c
),然后在那里:
char *logfile = "my_output.txt";
.c文件定义变量。然后更改标题以使其代替定义:
extern char *logfile;
这使它成为声明。现在事情应该有效,但你必须编译额外的模块,并将其包含在链接阶段。 (这样做的细节取决于您的开发工具。)