2013-03-25 103 views
0

我正在编程一个微控制器。创建我与2010年的VisualStudio和现在的所有代码,使用相同的代码与单片机,我得到这个错误:再次collect2:ld返回1退出状态

... 
    ./src/main.o:(.rodata.GPS_latitude+0x0): multiple definition of `GPS_latitude' 
./src/empresa1.o:(.rodata.GPS_latitude+0x0): first defined here 
./src/main.o:(.rodata.GPS_hora+0x0): multiple definition of `GPS_hora' 
./src/empresa1.o:(.rodata.GPS_hora+0x0): first defined here 
./src/gps.o: In function `GPS_PreencheCampos': 
gps.c:(.text.GPS_PreencheCampos+0x4): undefined reference to `GPS_GuardaAnterior' 
./src/main.o: In function `main': 
main.c:(.text.startup.main+0xa0): undefined reference to `GPS_PegaValorLatitude' 
main.c:(.text.startup.main+0xa4): undefined reference to `GPS_PegaLatitudeInt' 
main.c:(.text.startup.main+0xc0): undefined reference to `GPS_PegaValorLongitude' 
main.c:(.text.startup.main+0xc4): undefined reference to `GPS_PegaLongitudeInt' 
main.c:(.text.startup.main+0xf8): undefined reference to `GPS_PegaHoraInt' 
main.c:(.text.startup.main+0x110): undefined reference to `GPS_PegaStatusInt' 
main.c:(.text.startup.main+0x128): undefined reference to `GPS_PegaModoInt' 
main.c:(.text.startup.main+0x140): undefined reference to `GPS_PegaSatelitesInt' 
collect2: ld returned 1 exit status 
make: *** [TFRT_Leandro.axf] Error 1 

最初人们可以看到,也有“多重定义”一些错误味精。所有这些消息都是关于.h文件中定义的变量。他们被定义为GPS_DATA的波纹管所:

struct { 
    char data[7];  // Data no formato ddMMyy\0 
    char hora[7];  // Hora no formato hhmmss\0 
    char latitude[10]; // Latitude no formato ddmm.mmmm\0 
    char longitude[11]; // Longitude no formato dddmm.mmmm\0 
    char velocidade[6]; // Velocidade no formato sss.s\0 
    char curso[6];  // Curso no formato ccc.c\0 
    char satelites[3]; // Número de satélites no formato nn\0 
    char status[2];  // Qualidade do GPS Invalido(0), Valido GNSS fixo(1) ou Valido GNSS fixo diferencial(2) 
    char norteSul[2]; // Direção de latitude (N/S) 
    char lesteOeste[2]; // Direção de longitude (E/W) 
    char modo[2];  // Modo: Sem fixo disponível (1), 2D (2), 3D (3) 
} GPS_Info; 

typedef struct GPS_Dado{ 
    int origem; 
    int posicao; 
    int tamanho; 
    char * pDado; 
}; 

const struct GPS_Dado GPS_hora = {GPS_Tipo_GPRMC, 0, 7, GPS_Info.hora}; 

,我们可以看到的另一件事是,有以功能undefinede引用。我不明白这一点。每个函数都在头文件中声明了正确的文件main.c.

我希望有人能帮助我解决这个错误。 那么,关于这个疑问的任何其他问题可以随意询问评论。

问候

+0

好的,问题解决了。 .c和.h文件中的某些函数签名是不同的。而且我在.h文件中定义了变量。 – 2013-03-25 21:59:15

回答

1

你不应该在头文件中定义的变量和常量,只有声明它们:

extern const struct GPS_Dado GPS_hora; 

然后在执行(.c)文件,定义它:

const struct GPS_Dado GPS_hora = { GPS_Tipo_GPRMC, 0, 7, GPS_Info.hora }; 
相关问题