当gchar初始化程序得到安宁错误 [英] program givin error when gchar is initialized
问题描述
在我的 main.h
(包括在其他所有的src文件),我有:
in my main.h
(which is included in all other src file), I have:
char* buffer;
这编译和workes罚款。
This compiles and workes fine.
有关其他一些原因,我试图初始化缓存
,无论是作为
For some other reason, I tried to initialize buffer
, both as
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从野牛文件生成(野牛-d
)。缓冲区的不的定义有:
The problem is bib.o is generated from a bison file (bison -d
). buffer is NOT defined there:
$ grep buffer src/bib.y
$
缓冲区也从来不定义任何其他地方,但使用的:
buffer is also never defined ANYWHERE else, but used:
$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几天另一个字符变量回来,留下的问题是时间
NB: I can also recall having same type of error adding another character variable in main.h few days back, left the problem that time.
推荐答案
使用:
extern char *buffer; // declares buffer, but doesn't define it
在 main.h
,并确保你的缓冲的定义
只出现在一个曾经 .C
文件为:
and be sure your definition of buffer
appears only once in one .c
file as:
char *buffer = ""; // not equivalent to = "\0"
这篇关于当gchar初始化程序得到安宁错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!