使用VS进行编程时经常会遇到类似LNK1112、LNK2109、LNK1123这些问题,这里做一下总结。
1、LNK1112问题
问题描述:模块计算机类型“X86”与目标计算机类型“x64”冲突
原因:程序运行时链接所需的dll文件时发现所需的DLL为X64类型而实际编译出来的却是X86类型,因此报错。
解决方案:
1)检查系统是否已经安装VS下X64编译能力
在控制面板中找到VS2008,选择卸载或更改,如下:
之后看到如下界面:
之前遇到过这里的X64编译器和工具是灰色的没有安装的情况,所以安装vs的时候还是要注意这些小的细节,如果已经安装了可以跳过这一步了。
2)检查VS本身的包含路径是否正确设置为64位:
在VS中依次打开"工具”->“选项”->“项目和解决方案”->“VC++目录”,在平台这里选择X64,然后更改依赖的头文件,库文件和可执行文件目录:
注意不要混淆win32和x64的设置,一般在实际的项目中这里一般对应不同位数的操作系统进行不同的版本编译,比如下面的路径是X64的:
3)检查VS工程的配置是否正确 :
在需要编辑的工程上右键进入属性,如下:
如果需要的平台在下拉列表中没有,可以进行新建
上述步骤OK后回到属性页,选择“链接器”->“高级”,将目标计算机设置为MachineX64:
重新生成VS工程,一般是可以正常编译的。
2、LNK2109问题:
问题报错示例:
error LNK2019: 无法解析的外部符号 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall CArchiveCryption::DeCryptstring_2(char *)" (?DeCryptstring_2@CArchiveCryption@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAD@Z),该符号在函数 "public: static int __cdecl CActor::CheckTrail(void)" (?CheckTrail@CActor@@SAHXZ) 中被引用 Actor.obj
1)所在工程下缺少必要的头文件和源文件。可以查看一下这段错误中描述的类似CheckTrail()之类的函数所在的源文件和头文件是否已经添加到了该工程中,若不存在添加之后再次进行编译。
2)缺少必要的头文件,这里需要在工程上右键属性列表之后找到如下位置添加所需依赖的库:
再次进行编译。
3、LNK1123问题:
问题详情示例:
遇到这个问题一般需要先对工程右键进行清理。如果清理之后依旧编译仍然报这个错误,一边是因为cvtres.exe这个文件与使用的VS版本不匹配的原因。
参考博文:
http://blog.csdn.net/holybin/article/details/50881475