2017-10-23 21 views
-1

나는 어리석은 문제가있어서 어디서 오는지 알지 못합니다. #ifndef 지시문을 사용하여 #include가 모두 재정의되지 않았는지 확인했습니다. 슬프게도 그들 중 세 명이 일어나고 있습니다. 여기 내 여러 개의 파일은 아치 :#ifndef 지시문을 사용하여 여러 c 코드의 심볼을 다시 정의했습니다.

t_include.h

#ifndef T_FUNCTION_H_ 
#define T_FUNCTION_H_ 

#include "t_include.h" 

/*output vector*/ 
#define INPUT1A_LENGTH 5000 
#define INPUT2A_LENGTH 2800 
#define OUTPUTA_LENGTH 2202 
extern FLOAT32 sp_complex_convolution_A_output_thales[OUTPUTA_LENGTH]; 

/*misc parameter*/ 
#define CPU_CLOCK_KHZ   1400000 
#define CPU_CLOCK_MS   1/CPU_CLOCK_KHZ 
#define FIR_NB_MACS    INPUT1A_LENGTH * OUTPUTA_LENGTH  /* FIR algorithm complexity */ 
#define NB_OF_REP    10 
#define UMA_L2CACHE_L1DCACHE 0 

/* Project specific types */ 
typedef struct{ 
ect... 

그리고 지금은 파일 c는 t_function.h

#ifndef T_INCLUDE_H_ 
#define T_INCLUDE_H_ 

/* Project specific dependencies*/ 
#include "utilities.h" 
#include "fsp_function.h" 

#include "ti/csl/csl_tsc.h" 
#include "ti/csl/csl_cache.h" 
#include "ti/csl/csl_cacheAux.h" 

#include "ti_sp_complex_convolution_A_input1.h" 
#include "ti_sp_complex_convolution_A_input2.h" 
#include "to_sp_complex_convolution_A_output.h" 

#endif /* T_INCLUDE_H_ */ 

만 t_function.h 포함

t_function.c을

/* Dependencies */ 
#include "t_function.h" 
FLOAT32 sp_complex_convolution_A_output_thales[OUTPUTA_LENGTH]; 
/* API */ 
etc... 

그리고

/* dependencies */ 
#include "t_function.h" 
void main(void) { 
etc... 

t_main_function.c이 있지만 여기에 연결하는 동안 오류가오고 작동합니다 :

<Linking> 
error #10056: symbol "sp_complex_convolution_A_output" redefined: first defined in "./TEST/t_function.obj"; redefined in "./TEST/t_main_function.obj" 
error #10056: symbol "sp_complex_convolution_A_input2" redefined: first defined in "./TEST/t_function.obj"; redefined in "./TEST/t_main_function.obj" 
error #10056: symbol "sp_complex_convolution_A_input1" redefined: first defined in "./TEST/t_function.obj"; redefined in "./TEST/t_main_function.obj" 

error #10056: symbol "sp_complex_convolution_A_output_thales" redefined: first defined in "./TEST/t_function.obj"; redefined in "./TEST/t_main_function.obj" 
>> Compilation failure 
error #10010: errors encountered during linking; "CONVOLUTION_COMPLEX.out" not built 

그래서 오류 만 co.kr에서 자신의 .H에 정의 된 세 가지 기호 sp_complex_convolution_A_output, sp_complex_convolution_A_input1 및 sp_complex_convolution_A_input2에서

ti_sp_complex_convolution_A_input1.h

: 또한 #ifndef의 지시에 의해 보호된다

다른 두 사람도 마찬가지입니다 ...

그래서 나는 왜 그런 일이 벌어지고 있는지 잘 모릅니다.

답변

0

정의를 돕는 들으 좋아 :

FLOAT32 sp_complex_convolution_A_output_thales[OUTPUTA_LENGTH]; 

는 소스 파일로 이동합니다. , 엄지 손가락의 규칙으로

extern FLOAT32 sp_complex_convolution_A_output_thales[OUTPUTA_LENGTH]; 

어떤 헤더 파일에 메모리를 할당 아무것도 넣어하지 않는다 :

헤더 파일은 같은 선언 만 포함해야합니다.

+0

사실 나는 이것이 일을하기 위해 많은 것을 바꾸려고 시도하기 전에 이렇게되었다. 나는 이것이 확실히 extern 정의 여야한다는 것에 동의한다. Btw이 오류를 추가합니다 : unresolved symbol sp_complex_convolution_A_output_thales, 처음/.TEST/t_function.obj에서 참조됩니다. –

+0

@ ThéophileLeroy 'extern'은 다른 곳에서 정의됩니다. 그래서 그것은 어디에 정의되어 있습니까? 여기에 t_function.c의 – sergej

+0

이 있습니다. t_function.c : FLOAT32 sp_complex_convolution_A_output_thales [OUTPUTA_LENGTH]; 문제는 3 개의 참조 벡터 인 다른 세 .h에 남아 있습니다. –