2

我有一个使用共享库构建的主文件,它libhtmllibhtml使用另一个共享库构建的libctpe。当我构建两者时,我没有收到任何错误/警告libctpelibhtml但是当我链接主文件时,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

在您的应用程序代码中使用 extern 声明它,如下所示

extern State_t **state_info_table;

应该管用 !!

于 2013-05-15T16:31:11.060 回答
0

您确定要用 create_state_table 中的本地变量来伪装全局 state_info_table 变量吗?

也许应该是: *state_info_table = (State_t *)malloc(state_table_size *sizeof(State_t*));

于 2013-05-15T12:11:44.587 回答