2

私は共有ライブラリlibhtmllibhtml構築しているメインファイルを持っていますが、別の共有ライブラリを使用して構築されていますlibctpelibctpe両方をビルドしてもエラー/警告は表示されませんがlibhtml、メインファイルをリンクするとlibhtml次のエラーが表示され、次の警告が表示されます:

/home/krajput/parser/back_up/15_5/parser/ctpe/libctpe.so: への未定義の参照 state_info_table

現在、Libctpe にはファイル ctpe.c が含まれています。このファイルstate_info_tableでは、構造体ポインターのグローバル配列である " " がグローバルに宣言され、関数 を使用して定義されていますcreate_state_table()

State_t **state_info_table;

void create_state_table() {
  int i; 
  State_t **state_info_table = malloc(state_table_size *sizeof(State_t*));
  if(!state_info_table) {
    printf("\nMemroy Allcoation failed\n");
  }  
  for ( i=0;i<state_table_size;i++) {
    state_info_table[i] = malloc(1*sizeof(State_t*));
    state_info_table[i] = NULL;
  }
  return;
}

このファイル以外の場所ではこの配列を使用していません。また、" nm libctpe.s"を実行しようとするとstate_info_table、U (未定義のシンボル) と表示されます。何が問題なのか途方に暮れています。

4

2 に答える 2

0

グローバルな state_info_table-variable を create_state_table のローカル変数でマスカレードしてもよろしいですか?

おそらく次のようになります: *state_info_table = (State_t *)malloc(state_table_size *sizeof(State_t*));

于 2013-05-15T12:11:44.587 に答える
0

アプリケーションコードでは、次のように extern で宣言します

extern State_t **state_info_table;

動作するはずです!!

于 2013-05-15T16:31:11.060 に答える