初始化gchar时程序givin错误

在我的main.h (包含在所有其他src文件中)中,我有:

 char* buffer; 

这编译并且工作正常。

由于其他原因,我尝试初始化buffer ,两者都是

 char* buffer=""; 

 char* buffer="\0"; 

现在,构建它是错误的:

 src/search.o:(.data+0x0): multiple definition of `buffer' src/bib.o:(.data+0x0): first defined here src/mkbib.o:(.data+0x0): multiple definition of `buffer' src/bib.o:(.data+0x0): first defined here src/update_file.o:(.data+0x0): multiple definition of `buffer' src/bib.o:(.data+0x0): first defined here src/view.o:(.data+0x0): multiple definition of `buffer' src/bib.o:(.data+0x0): first defined here src/file_util.o:(.data+0x0): multiple definition of `buffer' src/bib.o:(.data+0x0): first defined here collect2: error: ld returned 1 exit status make[2]: *** [mkbib] Error 1 

问题是bib.o是从野牛文件( bison -d )生成的。 那里没有定义缓冲区:

 $ grep buffer src/bib.y $ 

缓冲区也从未在其他任何地方定义,但用于:

 $grep buffer src/*.c src/file_util.c: 44 : g_file_set_contents(filename, buffer, -1, &Err); src/file_util.c: 51 :// g_free(buffer); src/file_util.c: 75 : g_file_set_contents(filename, buffer, -1, &Err); src/file_util.c: 76 :// g_free(buffer); src/file_util.c: 140 : g_file_get_contents(filename, &buffer, &length , &error); src/file_util.c: 152 :// g_free(buffer); src/search.c: 99 : GtkTextBuffer *gs_buf=gtk_text_view_get_buffer(GTK_TEXT_VIEW(gs_txt)); src/search.c: 100 : gtk_text_buffer_get_start_iter (gs_buf, &start); src/search.c: 101 : gtk_text_buffer_get_end_iter (gs_buf, &end); src/search.c: 102 : gchar *gs_text = gtk_text_buffer_get_text (gs_buf, &start, &end, FALSE); src/search.c: 103 : strcat(buffer, gs_text); src/update_file.c: 106 : GString *str=g_string_new(buffer); src/update_file.c: 132 : buffer=str->str; src/view.c: 38: yyin=fmemopen(buffer,strlen(buffer),"r"); src/view.c: 178: // g_free(buffer); src/view.c: 259: buffer=str->str; $ 

注意:我还记得几天前在main.h中添加另一个字符变量的同一类型的错误,留下了问题的时间。

使用:

 extern char *buffer; // declares buffer, but doesn't define it 

在你的main.h

并确保buffer的定义只在一个.c文件中出现一次:

 char *buffer = ""; // not equivalent to = "\0"