如何解决这个c链接器错误?

时间:2014-01-13 09:13:36

标签: c arrays pointers linker

uint8 *measurements[30] = {(uint8*)0x0041c620}; 

我已经在我的程序中声明了一个全局变量,但是我收到了链接器错误

  

LNK2005:已在MAIN.obj中定义_测量

我正在修改代码

typedef unsigned char uint8;
    uint8 *measurements[30];
    measurements[30]= {(uint8*)0x0041c620}

然后我也收到了错误

3 个答案:

答案 0 :(得分:0)

该错误告诉您已在多个转换单元中定义了此全局变量 - 在MAIN.obj以及其他一些转换单元中。我不知道哪一个,因为你没有发布整个错误信息,只有一行。

您的问题中没有足够的信息来重现问题,或者告诉您错误的确切位置。也许您在头文件中定义了变量?

答案 1 :(得分:0)

头文件中的定义是什么?如果是这样,您将获得包含标头的每个源文件的变量的一个定义。尝试标记更改标题只是声明变量,而不是定义它,如下所示:

  extern uint8_t *measurements[30];

然后在其中一个文件中定义它,例如main.c像这样:

  uint8 *measurements[30] = {(uint8*)0x0041c620}; 

答案 2 :(得分:0)

您似乎需要30个8位值的数组,并且该数组已存在于某个特定地址。

在一个源文件(measurements.c)中:

uint8 * const measurements = (uint8*)0x0041c620;

在头文件(measurements.h)中:

uint8 * const measurements;

用法:

#include "measurements.h"

// In some function
measurements[29] = ... // Set last element to something

请注意,我添加了const,因为我认为您不想更改阵列地址(0x0041c620)。