设为首页 加入收藏

TOP

VC各种链接错的解决办法(一)
2013-07-22 18:16:32 来源: 作者: 【 】 浏览:315
Tags:各种 链接 解决 办法

  解决办法:

  1.nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv

  nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc

  nafxcw.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctype

  nafxcw.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype

  nafxcw.lib(dcprev.obj) : error LNK2001: unresolved external symbol __mbctype

  nafxcw.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype

  ..\..\Output\Release/FirewallMan.exe : fatal error LNK1120: 3 unresolved externals

  Error executing link.exe.

  解决办法:

  PROJECT->SETING->C/C++(www.cppentry.com)->PREPROCESSOR->定义 _AFXDLL,完毕。

  2.LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library

  解决办法:

  PROJECT->SETING->LINK->INPUT->IGNORE LIB...->MSVCRT.LIB

  3. 如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds

  就这样改:

  C/C++(www.cppentry.com)->Code Generation->Multithread DLL

  “Linking...

  nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

  nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex

  libcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main”

  VC++(www.cppentry.com)默认的工程设置是单线程的,而你使用了多线程,所以要修改设置。选择菜单“Project|settings”,选择C/C++(www.cppentry.com)标签,在CODE GENERATION分类中选择除SINGLE-THREADED的其他选择。

  其他:

  1. 解决error LNK2005: ___crtExitProcess 已经在 LIBCMTD.lib(crt0dat.obj) 中定义

  有的時候, 在 Debug 模式下編譯沒問題, 換到 Release 模式就發生一堆問題.

  典型的例子, 就是因為 c++ runtime library 設定不同, 所造成的重複定義連結錯誤.

  而另一個常見的例子是 專案與 library 使用不同的字元集合設定

  (如: 一個用 Unicode Character Set, 另一個用 Multi-Byte Character Set)

  這個錯誤

  發生原因, 有可能是

  1. 你 link 的 lib 使用 C++(www.cppentry.com) Multi-threaded DLL (/MD)

  2. 而你的 source 使用的 C++(www.cppentry.com) runtime library 是 Multi-threaded (/MT)

  導致重複定義

  解決方法:

  兩個使用相同的 C++(www.cppentry.com) runtime library.

  例如都使用 static 的 Multi-threaded (/MT).

  2. 错误 1 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ( 0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义 MSVCRTD.lib

  项目 -> 属性 -> c/C++(www.cppentry.com)  -> 代码生成  -> 运行时库  设置为: 多线程调试 DLL (/MDd)

  被引用的库和调用的程序编译选项不同,需要改成一致后编译

  3. #pragma once与 #ifndef的区别

  为了避免同一个文件被include多次

  1   #ifndef方式

  2   #pragma once方式

  在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。

  方式一:

  #ifndef __SOMEFILE_H__

  #define __SOMEFILE_H__

  ... ... // 一些声明语句

  #endif

  方式二:

  #pragma once

  ... ... // 一些声明语句

  #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况

  #pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。

  方式一由语言支持所以移植性好,方式二 可以避免名字冲突

  4. error LNK2019: 无法解析的外部符号 __imp__PathCombineW

  PathCombine是Shell api需要引入库

  #pragma comment( lib, "shlwapi.lib")

  5.  error C2662: "MyClass::GetName()”: 不能将“this”指针从“const MyClass”转换为“MyClass &”

  bool MyClass::operator==(const MyClass* n1) const

  {

  return GetName() == n1->GetName();

  }

  原因是不能在const函数中调用对象的非const方法,MyClass中的GetName()必须是const的。

  6. template 模板

  搞死了

  模板声明和定义必须在同一个文件中,而且只有实例话模板类型时才编译模板实例

  7. error C2275: “MyClass”: 将此类型用作表达式非法 MyClass.Instance();

  原因:Instance是静态方法,用.引用会出错。应该是MyClass::Instance()

  8. error LNK2019: 无法解析的外部符号 "public: __thiscall MyClass(void)

  原因:只声明了构造函数,MyClass(); ,但未定义。 可以定义空函数,或者直接注释掉,使用默认构造函数。

  9.  error C2504: “testing”: 未定义基类

  class PackToolTest : testing.Test {}

  原因:Test是testing命名空间下的一个类,需要用域操作符,testing::Test

  还有一个问题,缺少基类继承权限(public、protected、private)

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇插值法:拉格朗日、牛顿插值 下一篇vc开发简单的flash播放器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: