Qt C错误在juicy_lucy.o和main.o中复制符号_function_names,用于体系结构x86_64

时间:2013-06-25 08:16:07

标签: c qt

我正在使用Qt(Mac)中的C控制台项目,因为客户端不需要C ++

将所有内容都放在一个C文件中,一切都运行良好但当然, 它开始变得太大了。

所以我创建了一个新的juicy_lucy.h和juicy_lucy.c文件,首先,将一些东西从main.c转移到juicy_lucy.h,现在看起来像这样

#ifndef JUICY_LUCY_H
#define JUICY_LUCY_H

#define command_count   14
char  *function_names[command_count] = {
                    "CLEAR_LCD", "PUT_LCD", "SET_VAR", "ADC_READ",
                    "BIT_WRITE", "BIT_READ", "BIT_WAIT",
                    "FAIL_LESS", "FAIL_MORE", "FAIL_HIGH","FAIL_LOW",
                    "AVR_PROG","AVR_READ_SERIAL","AVR_WRITE_SERIAL"
                     };
int   param_count[command_count] = {0,3,2,1,2,1,2,2,2,1,1,1,1,1};
#endif // JUICY_LUCY_H

当然,在main.c和juicy_lucy.c

中都包含标题

现在,当我建立时,我得到了

在juicy_lucy.o和main.o中复制符号_function_names,用于体系结构x86_64

有人能说出可能出错的地方吗?

2 个答案:

答案 0 :(得分:1)

您必须将function_names声明为

const char* const function_names[] = ...

然后符号function_names不应在链接的应用程序中出现两次。

答案 1 :(得分:1)

在你的.h:

extern char *function_names[command_count];
extern int param_count[command_count];

在.c文件的一个中:

char  *function_names[command_count] = {
                    "CLEAR_LCD", "PUT_LCD", "SET_VAR", "ADC_READ",
                    "BIT_WRITE", "BIT_READ", "BIT_WAIT",
                    "FAIL_LESS", "FAIL_MORE", "FAIL_HIGH","FAIL_LOW",
                    "AVR_PROG","AVR_READ_SERIAL","AVR_WRITE_SERIAL"
                     };
int   param_count[command_count] = {0,3,2,1,2,1,2,2,2,1,1,1,1,1};