这里是.Lex生成的.c代码片段 Coredump即将进行第一次迭代
while (1) /* loops until end-of-file is reached */{
yy_cp = yy_c_buf_p;
/* Support of yytext. */
*yy_cp = yy_hold_char; // receiving coredump here
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.*/
yy_bp = yy_cp;
yy_current_state = yy_start;}
答案 0 :(得分:1)
我已经回答了我自己的问题。以下是解决方案的一些解释
问题在这里
ld:警告:符号“ yy_load_buffer_state ”的大小从libuperbe.a中的262( TYPE1_Lex .o)更改为libxxx.a中的146( TYPE2_Lex 强>的.o)
ld:警告:符号“ yy_init_buffer ”的大小从libuperbe.a中的278( TYPE1_Lex .o)更改为libxxx.a中的164( TYPE2_Lex 强>的.o)
生成的.c(TYPE1_Lex.c& TYPE2_Lex.c)中的某些符号相同
当两个目标文件绑定在单个.a中时类似 (yy_create_buffer,yy_init_buffer,yy_load_buffer_state)符号得到了 的覆盖强>
在运行时,应该调用TYPE2_Lex.c 中定义的方法yy_create_buffer(),yy_init_buffer(),yy_load_buffer_state(),但实际上这些方法是从TYPE1_Lex.c文件调用的和导致内存损坏的一些方法。
为了继续前进,我决定使用 sed 以下模式:
Sed TYPE2_Lex.c with:
Sed TYPE2_Lex.c with
这样Loader可以轻松区分符号。并且在运行时方法名称之间的混淆变为空。
在完成所有这些步骤后,我能够继续前进:) 感谢大家的帮助:)