error LNK2001: 无法解析的外部符号怎么解决

alyba 2010-08-15 09:50:29
vs2005, c++
类似的错误有500+条,怎么办?

llcommon.lib(llstring.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static void __cdecl std::_String_base::_Xran(void)" (__imp_?_Xran@_String_base@std@@SAXXZ),该符号在函数 "public: class std::basic_string,class std::allocator > & __thiscall std::basic_string,class std::allocator >::assign(class std::basic_string,class std::allocator > const &,unsigned int,unsigned int)" (?assign@?$basic_string@IU?$char_traits@I@std@@V?$allocator@I@2@@std@@QAEAAV12@ABV12@II@Z) 中被引用
llcommon.lib(llfixedbuffer.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: static void __cdecl std::_String_base::_Xran(void)" (__imp_?_Xran@_String_base@std@@SAXXZ)
llcommon.lib(llsdserialize.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_string,class std::allocator > & __thiscall std::basic_string,class std::allocator >::replace(class std::_String_iterator,class std::allocator >,class std::_String_iterator,class std::allocator >,class std::basic_string,class std::allocator > const &)" (__imp_?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0ABV12@@Z),该符号在函数 "public: class std::basic_string,class std::allocator > & __thiscall std::basic_string,class std::allocator >::_Replace > >(class std::_String_iterator,class std::allocator >,class std::_String_iterator,class std::allocator >,class std::_Vector_iterator >,class std::_Vector_iterator >,struct std::input_iterator_tag)" (??$_Replace@V?$_Vector_iterator@DV?$allocator@D@std@@@std@@@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@1@0V?$_Vector_iterator@DV?$allocator@D@std@@@1@1Uinput_iterator_tag@1@@Z) 中被引用
llcommon.lib(llfile.obj) : error LNK2001: 无法解析的外部符号 "protected: virtual class std::fpos __thiscall std::basic_filebuf >::seekoff(long,int,int)" (?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z)
llcommon.lib(llfile.obj) : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall std::basic_filebuf >::imbue(class std::locale const &)" (?imbue@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z)
llcommon.lib(llfile.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream > & __thiscall std::basic_ostream >::seekp(long,int)" (__imp_?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z),该符号在函数 "int __cdecl llofstream_size(class llofstream &)" (?llofstream_size@@YAHAAVllofstream@@@Z) 中被引用
llcommon.lib(llstat.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream > & __thiscall std::basic_ostream >::operator<<(unsigned __int64)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z),该符号在函数 "public: void __thiscall LLStatAccum::sum(double,unsigned __int64)" (?sum@LLStatAccum@@QAEXN_K@Z) 中被引用
llcommon.lib(llmemorystream.obj) : error LNK2001: 无法解析的外部符号 "protected: virtual class std::fpos __thiscall std::basic_streambuf >::seekoff(long,int,int)" (?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z)
E:\GIS\opensim\Hippo Build\win_crash_logger\RelWithDebInfo\windows-crash-logger.exe : fatal error LNK1120: 42 个无法解析的外部命
...全文
8680 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
侯雅文 2012-08-23
  • 打赏
  • 举报
回复
看不懂啊,到底怎么解决啊
wawehi 2011-03-30
  • 打赏
  • 举报
回复
自己定义了析构函数但是不写出申明的话会在链接的阶段报链接的错误。
wawehi 2011-03-30
  • 打赏
  • 举报
回复
检查一下您的析构函数有没有自己写义,如果已经已经定义,检查一下有没有申明,我刚刚也是这个情况。
chenjiawei007 2011-01-25
  • 打赏
  • 举报
回复
连接错误,看link选项中,是否没有将用到的库倒入进去,是否没有将用到的头文件包含进去
modaoshi3002 2011-01-25
  • 打赏
  • 举报
回复
以下是可能产生LNK2001错误的原因:
  一.由于编码错误导致的LNK2001。
  1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++ 源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。
  2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。
  3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。
  4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。
  5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。 静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。
  函数内声明的变量(局部变量) 只能在该函数的范围内使用。
  C++ 的全局常量只有静态连接性能。这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。
  6.当在基类中创建了虚函数而没有在基类中对虚函数做具体的实现时将会产生LNK2001错误。解决办法是:①、将该虚函数定义为纯虚函数。②、在基类中对该虚函数做具体实现。
  二.由于编译和链接的设置而造成的LNK2001
  1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块, 但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。在这种情况下使用/NOD将导致错误LNK2001。
  2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将得到“unresolved external on _WinMain@16”的LNK2001错误信息。
  3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB连接时也会发生LNK2001。
  4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001。
  5.当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产生LNK2001;同样,使用调试版模态库连接发行版应用程序时也会产生相同的问题。
  6.不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
  7.在不同的模块使用内联和非内联的编译选项能够导致LNK2001。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),这时将得到该错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函数。
  8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。


摘自:
http://baike.baidu.com/view/1229984.htm
alyba 2010-08-15
  • 打赏
  • 举报
回复
那怎么解决?

[Quote=引用 1 楼 jackyjkchen 的回复:]

你不是把默认库给禁止了吧,这些不是stl里的么
[/Quote]
lanhxg 2010-08-15
  • 打赏
  • 举报
回复
很吓人!
jackyjkchen 2010-08-15
  • 打赏
  • 举报
回复
你不是把默认库给禁止了吧,这些不是stl里的么
Erorr 2010-08-15
  • 打赏
  • 举报
回复
是不是工程没建对,重新建立一下工程

65,201

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧