CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

LNK2001的错误信息,而且libcmt.lib 和 msvcrt.lib 加入后无效

楼主isearthling(凡夫俗子)2001-01-26 01:15:00 在 VC/MFC / 基础类 提问

我在强迫生成.exe   后程序功能没有变化,但是错误的信息无法消除。  
  这里给出详细信息,麻烦大家了:  
   
  //------------------   code   ------------------  
  // 写一个程序读入任意个文件,这些文件的文件名以命令行参数给出,然后把他   们一个接一个地输出到cout流中。  
  void   cat(char*   pFileName)  
  {    
  CFile   f;  
  CFileException   e;  
   
  if(   !(f.Open(pFileName   ,   CFile::modeRead   |   CFile::shareDenyRead,   &e   )   )   )    
      {  
   
  #ifdef   _DEBUG        
  afxDump   <<   "   File   could   not   be   opened   "   <<   e.m_cause   <<   endl;  
  #endif  
   
  cout<<"   Error   open   file:   "<<pFileName<<endl;  
  exit(2);  
  }//End   of   if  
   
  if(f.GetLength()>=100)    
  {  
  cout<<"File   length   must   less   than   100!"<<endl;  
  exit(2);  
  }//End   of   if  
  char   pbuf[110];  
  unsigned   ReadLength=f.Read(pbuf,100);  
  unsigned   SteadyNum=ReadLength;  
  while((ReadLength--)>0)    
  cout<<pbuf[SteadyNum-ReadLength-1];  
  f.Close();  
  }//End   of   cat  
   
   
  //-------------------  
  void   main(int   argc,char   **argv)  
  {  
   
  while(--argc>0)  
  cat(*++argv);  
   
   
  }//Endof   main  
  //------------------- 问题点数:15、回复次数:3Top

1 楼zhq2000(方舟)回复于 2001-01-26 04:18:00 得分 15

libcmt.lib   和   msvcrt.lib   是Release版库。  
  你是不是用Debug方式编译,如是,用它们的Debug版库libcmtd.lib   和   msvcrtd.lib   。  
  如是用Release方式编译,则……………………   :-(   我不知道了!Top

2 楼isearthling(凡夫俗子)回复于 2001-02-01 09:01:00 得分 0

你给了一个很好的提示,我试了一下,将Project->Setting->General   中的No   MFC   改为   MFC  
  就可以了,谢谢。Top

3 楼javaonline(discoverer)回复于 2001-03-07 17:56:00 得分 0

我刚好也碰到了这个问题,我查了一下   MSDN  
  出现这个错误的原因是你在你的程序中使用了   CRT   函数所致,而且,这个错误只出现在Release   中,解决的方法有两种:  
  一:找出你所的   CRT   函数,改用非   CRT   函数  
  二:去掉预编译   _ATL_MIN_CRT   就可以了,但是这样以来就会增加编译后文件的大小,大概几十   K   的样子。  
   
  原文如下:  
   
  INFO:   LNK2001   Error   ATL   Release   Build  
  ID:   Q165076    
   
     
   
  --------------------------------------------------------------------------------  
  The   information   in   this   article   applies   to:  
   
  Microsoft   Active   Template   Library,   versions   2.0,   2.1,   3.0  
   
  --------------------------------------------------------------------------------  
   
   
  SUMMARY  
  Microsoft   Active   Template   Library   COM   AppWizard   generates   a   release   build   of   your   project   using   macro   _ATL_MIN_CRT.   Selecting   this   configuration   causes   the   C   run-time   (CRT)   library   startup   code   to   not   be   linked   into   your   project.   If   you   use   functions   or   code   in   your   project   that   require   the   use   of   the   C   run-time   library   startup   code,   you   may   experience   LNK2001   -   unresolved   external   errors   when   you   try   to   build   the   release   version   of   your   project.    
   
   
   
  MORE   INFORMATION  
  You   can   use   some   C   run-time   functions   without   requiring   the   CRT   startup   code.   Examples   include   the   mem*   functions.   Other   functions   require   the   CRT   startup   code.   CRT   string   comparisons   for   example   require   the   startup   code   as   the   CRT   initializes   some   tables   used   for   comparing.   Global   objects   that   have   constructors   also   require   the   startup   code.   In   Visual   C++   5.0,   statically   linking   the   startup   code   adds   about   25K   to   your   image   (in   Visual   C++   4.2   it   is   about   20K).    
   
  Following   are   some   suggestions   for   finding   the   cause   of   the   LNK2001   errors:    
   
  In   the   linker   options   there   is   an   "ignore   libraries"   edit   box.   Enter   Libcmt.lib   into   it,   and   build.   You   get   several   unresolved   externals.   This   list   is   everything   that   you   are   using   from   the   CRT.   Look   for   things   that   you   think   may   be   pulling   in   the   startup   code   and   remove   them   if   you   can.    
   
   
  Don't   ignore   Libcmt.lib,   but   turn   on   the   verbose   flag   for   the   linker.   From   this,   you   can   see   what   is   triggering   CRT   startup   code   to   get   pulled   in.    
   
   
  If   you   decide   that   you   really   need   the   startup   code,   then   remove   the   _ATL_MIN_CRT   define   from   the   project   settings.   You   can   also   dynamically   link   to   the   CRT,   which   reduces   your   image   size   but   requires   the   CRT's   DLL.   If   you   turn   on   exception   handling   you   have   to   pull   in   the   startup   code.   Even   when   building   minsize   the   default   is   to   statically   link   to   the   CRT   and   use   _ATL_MIN_CRT.   Top

相关问题

  • LNK
  • LNK关联文件错误
  • .h 与.lib
  • lib vs dll
  • LIB 的问题
  • 关于LIB库
  • 关于LIB库
  • 关于lib库
  • dll和lib
  • 如何使用*.lib

关键词

  • visual c++
  • 函数
  • 文件
  • atl
  • release
  • code
  • lnk2001
  • crt
  • 错误
  • cfile

得分解答快速导航

  • 帖主:isearthling
  • zhq2000

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo