32位转64位:LNK2019错误,如何检索相关信息

问题描述 投票:0回答:1

我正在开发一个 32 位 C++ 应用程序,我正在将其转换为 64 位应用程序(只需选择另一个配置,复制并调整所有相关设置,然后尝试构建它),现在我得到了陷入链接器错误

LNK2019 "unresolved external symbol ... referenced in function ..."
,我想获取更多信息:
我已经以 32 位重新构建了应用程序,并且找到了引用的函数,但是当我按 F12Shift+F12Ctrl+F12 时,我看不到在哪里实现是从以下位置检索的。

我认为该函数的实现位于 DLL 内部的某个位置,但我想确定这一点(一旦确认,我可以查找相应的设置,定义位置,并为我的 64 位配置复制此设置) .

也许问题可以用以下方式重新表述:如果从 DLL 中检索函数,是否可以知道该函数是在哪个 DLL 中实现的?

c++ visual-studio dll 32bit-64bit unresolved-external
1个回答
0
投票

Hans,关于 *.map 文件的建议是一个救星:这让我知道在哪个文件中可以找到提到的函数。
显然,这还没有结束:提到的文件是一个 DLL,虽然没有引用 DLL 本身,但引用了一个 LIB 文件,该文件重定向到 DLL。
如果这还不够困难:函数本身是一个

__imp_
函数,并且似乎有一个陷阱:

  • 32 位:
    __imp__
    函数(注意
    imp
    后的两个下划线)
  • 64 位:
    __imp_
    函数(注意
    imp
    后面的单下划线)

最后,我通过检查构建输出解决了这个问题(比较

LIB=
PATH=
条目,并确保它们在两种情况下相似:当一个输出中有对 32 位库的引用时,应该有一个引用其他输出中的 64 位库)。
在 32 位输出中,我看到链接器引用了一个库,而在 64 位链接的情况下他没有这样做:我在项目的配置中添加了相应的库(配置属性、链接器、输入、附加依赖项),这终于解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.