2013-03-25 1 views
0

마이크로 컨트롤러를 프로그래밍 중입니다. 나는이 오류를 받고 있어요, 마이크로 컨트롤러와 동일한 코드를 사용하여, 지금으로 VisualStudio 2010 년과 나의 모든 코드를 만들 : 다시 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 

는 처음에 하나가 "여러 정의"의 일부 오류 MSG가 있음을 알 수있다. 이 모든 msg는 .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}; 

또 하나주의해야 할 점은 함수에 대한 정의가 없다는 것입니다. 나는 그것을 이해하지 못했다. 모든 함수는 main.c 파일에 올바르게 포함 된 헤더 파일에 선언되어 있습니다.

누군가이 오류로 나를 도울 수 있기를 바랍니다. 이 의심에 관한 다른 질문은 언제든지 의견을 물을 수 있습니다.

안부

당신은 헤더 파일에 변수와 상수를 정의해서는 안
+0

그래, 문제가 해결되었습니다. 일부 함수 서명은 .c 및 .h 파일에서 다릅니다. 또한 .h 파일에서 변수를 정의하고있었습니다. –

답변

1

단지를 선언

extern const struct GPS_Dado GPS_hora; 

을 다음 구현 (.c) 파일에, 그것을 정의 :

const struct GPS_Dado GPS_hora = { GPS_Tipo_GPRMC, 0, 7, GPS_Info.hora }; 
관련 문제