Chinaunix
标题:
undefined reference to `.LC154'是什么错误?
[打印本页]
作者:
yecheng_110
时间:
2006-11-29 10:27
标题:
undefined reference to `.LC154'是什么错误?
undefined reference to `.LC154'
请问一下 这是什么错误?
`.LC154'不是自己写的标识符
我想应该是编译程序产生的吧
[
本帖最后由 yecheng_110 于 2006-11-29 10:30 编辑
]
作者:
lenovo
时间:
2006-11-29 11:23
缺少某个库吧。
作者:
yecheng_110
时间:
2006-11-29 11:34
但是把这个子程序注释了就不会有错误了
但是把这个子程序单独提出来测试也不会有错误
作者:
albcamus
时间:
2006-11-29 11:48
post your codes, please.
作者:
yecheng_110
时间:
2006-11-29 12:43
void bannedObject(DataBuffer* body)
{
#define OBJLEN 7 //"<object"
#define ENDOBJLEN 9 //"</object>"
#define CLASSIDLEN 5 //" classid="
#define CLASSID_SIZE 42
#define CLASSID_COLON_LEN 8 //"classid:"
#define VIDEO_NUMBER 6
const char * const CLASSID_COLON = "classid:";
//const char * const FLASH_CLSID = "D27CDB6E-AE6D-11cf-96B8-444553540000";
const char * const AVI_CLSID = "CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA";
const char * const MPEG_CLSID = "05589FA1-C356-11CE-BF01-00AA0055595A";
const char * const QTIME_CLSID = "02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";
const char * const MSMEDIAPLAYER_CLSID = "6BF52A52-394A-11d3-B153-00C04F79FAA6";
const char * const WMA_CLSID = "22d6f312-b0f6-11d0-94ab-0080c74c7e95";
const char * const RM_CLSID = "CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA";
const char * const VIDEO[] = {AVI_CLSID,MPEG_CLSID,QTIME_CLSID,MSMEDIAPLAYER_CLSID,WMA_CLSID ,RM_CLSID};
int bodylen = body->buffer_length;
char* rawbody = body->data;
char* bodylc = new char[bodylen + 128];
if(bodylc == NULL)
{
return;
}
char *p;
char *plc;
int sizediff = 0;
char *t,*t1,*t2,*t3;
int find_string;
for(p = rawbody,plc = bodylc;;)
{
t = strcasestr(p,"<object ");
if(t == NULL)
{
break;
}
t1 = find_casestrings(t + OBJLEN ,2,&find_string," classid=","</object>");
if(t1 == NULL)
{
break;
}
if(find_string == 0)
{
t2 = find_casestrings(t1 + CLASSIDLEN ,3,&find_string," ",">","</object>");
if(t2 == NULL)
{
break;
}
if(find_string != 2)
{
t3 = strcasestr(t2,"</object>");
if(t3 == NULL)
{
break;
}
char *classid;
classid = t1 + CLASSIDLEN ;
if(*classid == '\"')
{
classid++;
}
if(strncasecmp(classid,CLASSID_COLON,CLASSID_COLON_LEN) == 0)
{
classid += CLASSID_COLON_LEN;
}
bool isvideo = false;
for(int i = 0;i < VIDEO_NUMBER; i++)
{
if( strncasecmp(classid,VIDEO[i],CLASSID_SIZE) == 0 )
{
isvideo = true;
break;
}
}
if( isvideo )
{
strncpy(plc,p,t1 - p );
plc += (t1 - p);
strncpy(plc,t2,t3 - t2 + ENDOBJLEN);
plc += (t3 - t2 + ENDOBJLEN);
p = t3 + ENDOBJLEN;
sizediff -= (t2 - t1);
}
else
{
strncpy(plc,p ,t3 - p + ENDOBJLEN);
plc += (t3 - p + ENDOBJLEN);
p = t3 + ENDOBJLEN;
}
}
else
{
strncpy(plc,p,t1 - p );
plc += (t1 - p);
strncpy(plc,"</object>" ,ENDOBJLEN);
plc += ENDOBJLEN;
p = t2 + ENDOBJLEN;
sizediff -= (t2 - t1 + 1);
}
}
else
{
strncpy(plc,p ,t1 - p + ENDOBJLEN);
plc += (t1 - p + ENDOBJLEN);
p = t1 + ENDOBJLEN;
}
}
strcpy(plc,p);
delete[] body->data;
body->data = bodylc;
body->buffer_length = body->buffer_length + sizediff;
}
复制代码
[
本帖最后由 yecheng_110 于 2006-11-29 13:03 编辑
]
作者:
yecheng_110
时间:
2006-11-29 12:48
DataBuffer可以看作这样的结构
typedef struct _DataBuffer
{
char *data;
int buffer_length;
}DataBuffer;
data指向一个动态分配的字符串
buffer_length是字符串的长度
find_casestrings是我写的函数
不区分大小的从一个字符串中找到N个字符串中第一个出现的字符串
[
本帖最后由 yecheng_110 于 2006-11-29 12:56 编辑
]
作者:
yecheng_110
时间:
2006-11-29 13:33
我看了一下生成的汇编程序里
.LC154对应下面这句
const char * const CLASSID_COLON = "classid:";
作者:
albcamus
时间:
2006-11-29 16:05
LC不过是个.rodata中的常量字符串的位置而已。 出现这样的问题, 多换编译器、连接器试试, 极有可能是编译器和连接器版本不配合造成的
作者:
yecheng_110
时间:
2006-11-29 16:17
原来是把const char * const 定义在成员函数中就有这个问题
先把它放在文件中了
原因还不明白
还不是很清楚C++和C的编译器的不同
[
本帖最后由 yecheng_110 于 2006-11-29 16:21 编辑
]
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2