VC2010遇到的LNK2001 2019错误

mrpeterchen 2011-12-26 08:26:43
这样的LNK错误之前遇到过,多半是因为没加LIB文件导致的。

可现在问题有些不同:
在win32编译器下,没有这样的错误,可以成功生成EXE文件。换X64编译器,立马产生一堆这样的错误


我的目的是想测试下代码是否可以移植到WIN64位系统上。
可是用X64编译器编译,出现那么多链接错误。

下面是我的编译环境:
OS: WIN 7 64位
开发工具:VC2010(工具本身是32位的,不过我装了2个编译器,一个WIN32,一个X64,为了测试代码可移植性)

跪求高人帮忙啊
...全文
741 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
东西北 2013-04-16
  • 打赏
  • 举报
回复
我也遇到这个问题了,lz解决了吗?怎么弄的?
mrpeterchen 2012-01-13
  • 打赏
  • 举报
回复
这个链接咋看啊,放IE里回车,看不了啊

高手来帮忙啊
小弟感觉好无助啊~
赵4老师 2012-01-12
  • 打赏
  • 举报
回复
Visual Studio
64 位应用程序
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vs64/html/fd4026bc-2c3d-4b27-86dc-ec5e96018181.htm
mrpeterchen 2012-01-12
  • 打赏
  • 举报
回复
还是没解决,继续等高手来救我~
mrpeterchen 2012-01-09
  • 打赏
  • 举报
回复
再弱弱的问下,log存哪了呀? WIN 7的系统
mrpeterchen 2012-01-09
  • 打赏
  • 举报
回复
哦~~~ 我再试试

多谢高手指点啊 哈
xunxun 2012-01-08
  • 打赏
  • 举报
回复
kernel32.lib那些只是一个名字而已,有32位也有64位的

所以你这个不好说了

log文件里写的啥呢

你可以直接套用他的命令行在cmd里输入(开始菜单里找 Visual Studio x64 兼容工具命令提示(2010))
到你的构建目录

输入cl 和 link 确定是否是64位

link /OUT:"D:\Projects\ProtoDriWinPcap\x64\Debug\ProtoDriWinPcap.dll" /INCREMENTAL /NOLOGO /DLL "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEF:"ProtoDriWinPcap.def" /MANIFEST /ManifestFile:"x64\Debug\ProtoDriWinPcap.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\Projects\ProtoDriWinPcap\x64\Debug\ProtoDriWinPcap.pdb" /SUBSYSTEM:WINDOWS /PGD:"D:\Projects\ProtoDriWinPcap\x64\Debug\ProtoDriWinPcap.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X64 /ERRORREPORT:QUEUE ...obj...

后面跟你编译生成的obj

我怀疑你IDE出了什么问题,虽然设置是这样,可是调用的link不对……
only_lonely 2012-01-06
  • 打赏
  • 举报
回复
"kernel32.lib" "user32.lib" "gdi32.lib"

既然都已经是64位了,为何还要用 32 的lib?
mrpeterchen 2012-01-06
  • 打赏
  • 举报
回复
那要咋改类? 上哪找64的LIB去类。。。晕哈

高手们,帮人帮到底,送佛送到西啊
mrpeterchen 2012-01-05
  • 打赏
  • 举报
回复
哦,多谢指点,我看看先,今天晚上把命令行贴出来
mrpeterchen 2012-01-05
  • 打赏
  • 举报
回复
连接器命令行如下:

X64连接器命令行如:
/OUT:"D:\Projects\ProtoDriWinPcap\x64\Debug\ProtoDriWinPcap.dll" /INCREMENTAL /NOLOGO /DLL "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEF:"ProtoDriWinPcap.def" /MANIFEST /ManifestFile:"x64\Debug\ProtoDriWinPcap.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\Projects\ProtoDriWinPcap\x64\Debug\ProtoDriWinPcap.pdb" /SUBSYSTEM:WINDOWS /PGD:"D:\Projects\ProtoDriWinPcap\x64\Debug\ProtoDriWinPcap.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X64 /ERRORREPORT:QUEUE

******************************************************************************
WIN32连接器如下:
/OUT:"D:\Projects\ProtoDriWinPcap\Debug\ProtoDriWinPcap.dll" /INCREMENTAL /NOLOGO /DLL "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEF:"ProtoDriWinPcap.def" /MANIFEST /ManifestFile:"Debug\ProtoDriWinPcap.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\Projects\ProtoDriWinPcap\Debug\ProtoDriWinPcap.pdb" /SUBSYSTEM:WINDOWS /PGD:"D:\Projects\ProtoDriWinPcap\Debug\ProtoDriWinPcap.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

高人帮忙看下吧,到底问题出在哪,或者教下我该如何跟踪这类问题?

多谢啦
xunxun 2012-01-04
  • 打赏
  • 举报
回复
我记得他在本地会生成log文件的,你可以看看

或者可以查看
工程属性-linker-命令行

log应该记录的更准确些
xunxun 2012-01-04
  • 打赏
  • 举报
回复
还是没看见你的linker命令行

属性不可能一致,至少machine的target是不一样的

所以看你详细的命令行就知道哪里错了
mrpeterchen 2012-01-04
  • 打赏
  • 举报
回复
LINKER命令行在哪呢? 对VC工具还是不太熟呢
mrpeterchen 2012-01-03
  • 打赏
  • 举报
回复
继续等待
mrpeterchen 2011-12-28
  • 打赏
  • 举报
回复
继续跪求,高手帮忙~~
ouyh12345 2011-12-27
  • 打赏
  • 举报
回复
两个版本的lib不同
老邓 2011-12-27
  • 打赏
  • 举报
回复
64位的lib、32位的lib,不要混用。
mrpeterchen 2011-12-27
  • 打赏
  • 举报
回复
我检查了32DEBUG的属性,里头所有参数和64DEBUG属性里是一致的

包括可执行文件目录,包含目录,库目录等

例如:
库目录:
WIN32 DEBUG = $(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib;D:\Projects\WpdPack_4_1_2\WpdPack\lib;
X64 DEBUG = $(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib;D:\Projects\WpdPack_4_1_2\WpdPack\lib\x64;

楼上2位说的问题,我也确实有考虑过这个可能性,但不知道怎么跟踪下去?
就比如 error LNK2019: 无法解析的外部符号 __imp_malloc,我想不论32位还是64位,他们应该都有malloc这个API吧。 难道X64下,没这个API的?还是叫其他名字了?

我其实还考虑过另外1个问题,就是函数调用约定的问题。
查了下汇编资料,32汇编调用函数,好像是STDCALL约定,函数参数会压入栈内,而64汇编调用函数时,前4个函数形参会放入4个寄存器内,之后如果还有参数才会压入栈,也就是所谓的FASTCALL约定。

继续跪求,这些链接错误,会不会是由于32位编译器和X64编译器调用约定不同造成的?
函数调用约定到底是CPU架构决定呢,还是编译器决定,还是操作系统?
我可以认为更改调用约定吗?

继续等ING。
高手来啊
mrpeterchen 2011-12-27
  • 打赏
  • 举报
回复
我检查了32DEBUG的属性,里头所有参数和64DEBUG属性里是一致的

包括可执行文件目录,包含目录,库目录等

例如:
库目录:
WIN32 DEBUG = $(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib;D:\Projects\WpdPack_4_1_2\WpdPack\lib;
X64 DEBUG = $(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib;D:\Projects\WpdPack_4_1_2\WpdPack\lib\x64;

楼上2位说的问题,我也确实有考虑过这个可能性,但不知道怎么跟踪下去?
就比如 error LNK2019: 无法解析的外部符号 __imp_malloc,我想不论32位还是64位,他们应该都有malloc这个API吧。 难道X64下,没这个API的?还是叫其他名字了?

我其实还考虑过另外1个问题,就是函数调用约定的问题。
查了下汇编资料,32汇编调用函数,好像是STDCALL约定,函数参数会压入栈内,而64汇编调用函数时,前4个函数形参会放入4个寄存器内,之后如果还有参数才会压入栈,也就是所谓的FASTCALL约定。

继续跪求,这些链接错误,会不会是由于32位编译器和X64编译器调用约定不同造成的?
函数调用约定到底是CPU架构决定呢,还是编译器决定,还是操作系统?
我可以认为更改调用约定吗?

继续等ING。
高手来啊
加载更多回复(2)
VC编译中出现以下错误时: LINK : fatal error LNK1104: cannot open file 'uafxcwd.lib' 解决方法 1.菜单project-》settnigs-》link-》Object/Library modules:中添加uafxcwd.lib (win7下亲测可用) 2. 如果还是不行,选择vc的全部安装,而不是默认安装 如果是unicode,可以用vc盘修复一下vc,钩选相关项。 如果以上方法不行,可以试试下面的方法。 说明: uafxcwd.lib多见于VC6编译过程中,有时候会遇到“ fatal error LNK1104: cannot open file "uafxcwd.lib"”,意思是找不到uafxcwd.lib库文件,你可在此下载,存放在提示的路径下即可,若缺少这个文件而不修复的话,VC项目可能无法编译成功。如果系统提示“没有找到uafxcwd.lib”、“缺少uafxcwd.lib文件”或者无法加载uafxcwd.lib等提示信息,您需要下载uafxcwd.lib后,拷贝到提示的路径里或在系统内安装注册该文件即可。   安装及使用方法(仅供参考,本方法对BPL文件无效):   ①将下载解压的uafxcwd.lib文件复制到C:\Windows\System32系统目录下(请注意:Win7、Vista的系统目录请以实际为准);   ②打开“开始”菜单-选择“运行”,输入“regsvr32 uafxcwd.lib”,在接下来的窗口中按回车确认即可完成控件注册。   ③如果在运行某一软件或程序编译时提示缺少、没有找到uafxcwd.lib等类似提示,您可按照提示的路径将lib拷贝到指定目录即可,或者重新添加文件引用。

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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