【发布时间】:2015-04-07 15:12:56
【问题描述】:
有没有办法告诉编译时使用的每个 DLL 的完整路径?
我正在尝试制作一个带有易于编组函数的 DLL,以便在 C# 应用程序和文件系统 Minifilter 之间进行通信(目前使用 Minispy 示例来检查一切是否运行顺利)。
在 Visual Studio 2013 中使用“Win32”作为我的目标平台时成功编译和运行,但使用 printf("%p",...); 打印出指针时它们的长度只有 8 个字符,而本来应该是 16 个字符(我的计算机是 64 位),这让未来的指针杂乱无章。
对于其他项目,我的活动解决方案平台一直是 x64。不幸的是,将配置管理器中的平台更改为 DLL 的 x64 会在编译期间生成以下错误:
错误 1 错误 LNK1112:模块机器类型“X86”与目标机器类型“x64”冲突
我在网上查了一下,这似乎是解决方案某些部分的配置问题,但我所有的项目都应该在 x64 中编译。清理和重建以删除旧文件也没有效果。
我已使用 dumpbin.exe 检查我认为我的库链接到的 DLL 的机器类型,并且一切似乎都井然有序。我通过检查项目属性中的链接器命令行选项得到了这些,但它们的名称没有显示它们是从哪里读取的(例如:kernel32.lib; user32.lib; gdi32.lib; fltLib.lib ...)。由于我仍然遇到此问题,我认为它可能链接到相同 DLL 的错误(32 位)版本。
有没有办法告诉编译时使用的每个 DLL 的完整路径?或者更好的是,有没有办法知道具体是哪个 DLL 导致了 LINK1112 错误?
我使用了 /VERBOSE:LIB 命令并删除了 /NOLOGO 选项,但输出效果不佳,在要执行的命令后立即停止,没有其他信息。
【问题讨论】:
-
使用 /VERBOSE 并在输出中搜索 LNK1112。它应该让你找到罪魁祸首。
标签: c++ c visual-studio linker