未定义链接库时对全局数组的引用

时间:2013-05-15 12:07:42

标签: c linker global-variables shared-libraries

我正在使用共享库libhtml构建一个主文件,libhtml使用另一个共享库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(未定义的符号)。我不知道如何问题可能是什么。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

extern State_t **state_info_table;

应该工作!!