免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2398 | 回复: 8
打印 上一主题 下一主题

undefined reference to `.LC154'是什么错误? [复制链接]

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-29 10:27 |只看该作者 |倒序浏览
undefined reference to `.LC154'

请问一下 这是什么错误?

`.LC154'不是自己写的标识符

我想应该是编译程序产生的吧

[ 本帖最后由 yecheng_110 于 2006-11-29 10:30 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-11-29 11:23 |只看该作者
缺少某个库吧。

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
3 [报告]
发表于 2006-11-29 11:34 |只看该作者
但是把这个子程序注释了就不会有错误了
但是把这个子程序单独提出来测试也不会有错误

论坛徽章:
0
4 [报告]
发表于 2006-11-29 11:48 |只看该作者
post your codes, please.

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
5 [报告]
发表于 2006-11-29 12:43 |只看该作者

  1. void bannedObject(DataBuffer* body)
  2. {
  3.         #define OBJLEN         7 //"<object"
  4.         #define ENDOBJLEN      9 //"</object>"
  5.     #define CLASSIDLEN     5 //" classid="
  6.     #define CLASSID_SIZE   42
  7.     #define CLASSID_COLON_LEN 8 //"classid:"

  8.         #define VIDEO_NUMBER 6

  9.     const char * const CLASSID_COLON  = "classid:";

  10.         //const char * const FLASH_CLSID    = "D27CDB6E-AE6D-11cf-96B8-444553540000";

  11.     const char * const AVI_CLSID                         = "CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA";
  12.         const char * const MPEG_CLSID                         = "05589FA1-C356-11CE-BF01-00AA0055595A";
  13.         const char * const QTIME_CLSID                         = "02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";
  14.         const char * const MSMEDIAPLAYER_CLSID         = "6BF52A52-394A-11d3-B153-00C04F79FAA6";
  15.         const char * const WMA_CLSID             = "22d6f312-b0f6-11d0-94ab-0080c74c7e95";
  16.         const char * const RM_CLSID              = "CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA";

  17.     const char * const VIDEO[] = {AVI_CLSID,MPEG_CLSID,QTIME_CLSID,MSMEDIAPLAYER_CLSID,WMA_CLSID ,RM_CLSID};

  18.     int bodylen = body->buffer_length;
  19.     char* rawbody = body->data;

  20.         char* bodylc = new char[bodylen + 128];
  21.     if(bodylc == NULL)
  22.         {
  23.                 return;
  24.         }

  25.         char *p;
  26.         char *plc;
  27.         int sizediff = 0;
  28.         char *t,*t1,*t2,*t3;
  29.         int  find_string;

  30.         for(p = rawbody,plc = bodylc;;)
  31.         {
  32.         t = strcasestr(p,"<object ");
  33.                 if(t == NULL)
  34.                 {
  35.            break;
  36.                 }
  37.                 t1 = find_casestrings(t + OBJLEN ,2,&find_string," classid=","</object>");
  38.                 if(t1 == NULL)
  39.                 {
  40.                         break;
  41.                 }

  42.                 if(find_string == 0)
  43.                 {
  44.                         t2 = find_casestrings(t1 + CLASSIDLEN ,3,&find_string," ",">","</object>");
  45.                         if(t2 == NULL)
  46.                         {
  47.                                 break;
  48.                         }
  49.                         if(find_string != 2)
  50.                         {
  51.                                 t3 = strcasestr(t2,"</object>");
  52.                                 if(t3 == NULL)
  53.                                 {
  54.                                         break;
  55.                                 }
  56.                                 char *classid;
  57.                                 classid = t1 + CLASSIDLEN ;
  58.                                 if(*classid == '\"')
  59.                                 {
  60.                   classid++;
  61.                                 }
  62.                 if(strncasecmp(classid,CLASSID_COLON,CLASSID_COLON_LEN) == 0)
  63.                                 {
  64.                    classid += CLASSID_COLON_LEN;
  65.                                 }
  66.                                 bool isvideo = false;
  67.                                 for(int i = 0;i < VIDEO_NUMBER; i++)
  68.                                 {
  69.                                         if( strncasecmp(classid,VIDEO[i],CLASSID_SIZE) == 0 )
  70.                                         {
  71.                                                 isvideo = true;
  72.                                                 break;
  73.                                         }
  74.                                 }

  75.                                 if( isvideo )
  76.                                 {
  77.                            strncpy(plc,p,t1 - p );
  78.                                         plc += (t1 - p);
  79.                                         strncpy(plc,t2,t3 - t2 + ENDOBJLEN);
  80.                                         plc += (t3 - t2 + ENDOBJLEN);
  81.                                         p = t3 + ENDOBJLEN;
  82.                                         sizediff -= (t2 - t1);
  83.                                 }
  84.                                 else
  85.                                 {
  86.                                         strncpy(plc,p ,t3 - p + ENDOBJLEN);
  87.                                     plc += (t3 - p + ENDOBJLEN);
  88.                                     p = t3 + ENDOBJLEN;
  89.                                 }
  90.                         }
  91.                         else
  92.                         {
  93.                                 strncpy(plc,p,t1 - p );
  94.                                 plc += (t1 - p);
  95.                                 strncpy(plc,"</object>" ,ENDOBJLEN);
  96.                                 plc += ENDOBJLEN;
  97.                                 p = t2 + ENDOBJLEN;
  98.                 sizediff -= (t2 - t1 + 1);
  99.                         }
  100.                 }
  101.                 else
  102.                 {
  103.                         strncpy(plc,p ,t1 - p + ENDOBJLEN);
  104.                         plc += (t1 - p + ENDOBJLEN);
  105.             p = t1 + ENDOBJLEN;
  106.                 }
  107.         }
  108.         strcpy(plc,p);
  109.         delete[] body->data;
  110.         body->data = bodylc;
  111.         body->buffer_length = body->buffer_length + sizediff;
  112. }
复制代码

[ 本帖最后由 yecheng_110 于 2006-11-29 13:03 编辑 ]

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
6 [报告]
发表于 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 编辑 ]

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
7 [报告]
发表于 2006-11-29 13:33 |只看该作者
我看了一下生成的汇编程序里

.LC154对应下面这句
const char * const CLASSID_COLON  = "classid:";

论坛徽章:
0
8 [报告]
发表于 2006-11-29 16:05 |只看该作者
LC不过是个.rodata中的常量字符串的位置而已。 出现这样的问题, 多换编译器、连接器试试, 极有可能是编译器和连接器版本不配合造成的

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
9 [报告]
发表于 2006-11-29 16:17 |只看该作者
原来是把const char * const 定义在成员函数中就有这个问题
先把它放在文件中了
原因还不明白
还不是很清楚C++和C的编译器的不同

[ 本帖最后由 yecheng_110 于 2006-11-29 16:21 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP