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