2017-10-23 1 views
-1

私は愚かな問題があり、どこから来たのかわかりません。 #ifndefディレクティブを使って#includeがすべて再定義されていないことを確認しました。悲しいことに、起こっている3人のために。ここに私の複数のファイルは、アーチ:#ifndef命令で複数のcコードのシンボルを再定義しました

t_include.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

#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を含める:

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 

だから、エラーのみCOM自分の.hの中で定義されている3つのシンボルsp_complex_convolution_A_output、sp_complex_convolution_A_input1とsp_complex_convolution_A_input2から

ti_sp_complex_convolution_A_input1.h

:また#ifndefのディレクティブにより保護されています

他の2つについても同じです...

だから私はなぜそれが起こっているのか分かりません。

答えて

0

の定義を支援するための Thxをが好き:

FLOAT32 sp_complex_convolution_A_output_thales[OUTPUTA_LENGTH]; 

は、ソースファイルに行く必要があります。 、経験則として

extern FLOAT32 sp_complex_convolution_A_output_thales[OUTPUTA_LENGTH]; 

何がヘッダファイルにメモリを割り当てる何かを入れない:

ヘッダファイルは次のように宣言だけが含まれている必要があります。

+0

実際には、私はそれが動作させるようにするために多くのことを変更しようとする前に、これはこれのようなものでした、私は確かにこれがexternの定義でなければならないことに同意します。 Btwこれはエラーを追加します: 未解決のシンボル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の3つの参照ベクトル –

関連する問題