c++ - 使用 Visual Studio 2008 从 x86 编译 x64 dll : unresolved external __imp_ symbols

标签 c++ c visual-studio visual-studio-2008

我使用 Visual Studio 2008 将一些外部 C++ 代码编译到 dll、thirdpartycode.dll 中。该代码包装在 extern“C”中。

由于我正在交叉编译,因此在我的 32 位机器上创建了一个 64 位 dll;我在“配置管理器”中使用 x64 作为“主动解决方案平台”。

我的thirdpartycode.dll 编译并链接成功。 接下来我想创建另一个 dll,其中包含调用thirdpartycode.dll 的代码: 包装器.dll。 顾名思义,它是一个包装器,简化了对thirdpartycode.dll 内复杂API 的某些调用。 然后我计划从 C# 程序调用wrapper.dll。

然而,我的问题是,当我尝试链接我的wrapper.dll时,我得到了未解析的符号:-(。 对于thirdpartycode.dll中的每个函数,例如“功能1”;我得到一个未解析的外部符号“__imp_func1”。使用 Dependency Walker 我验证thirdpartycode.dll 确实导出“func1”。

我确实在“其他依赖项”中列出了thirdpartycode.lib。我已打开/VERBOSE,可以看到搜索了thirdpartycode.lib。

如果我重复整个过程,但使用 x86 作为“主动解决方案平台”,事情就很好了!?

知道出了什么问题吗?

__imp_ 前缀从何而来? 这有点令人困惑,因为为了进行故障排除,我将使用 Dependency Walker 从thirdpartycode.dll 导出的符号与使用dumpbin 从wrapper.obj 导出的所需符号进行比较。

预先感谢您的回答!

最佳答案

只是为了验证一下,当您将thirdpartycode.lib 添加到“其他依赖项”时,您确保包含正确的库位置路径吗?在 Linker->General 的“附加库目录”部分下。

此外,如果项目位于同一解决方案中,您是否确保您的构建顺序是第三方代码项目在您的代码之前构建?

关于c++ - 使用 Visual Studio 2008 从 x86 编译 x64 dll : unresolved external __imp_ symbols,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3306925/

相关文章:

c - C语言中如何从逗号分隔的字符串中获取子字符串

javascript - 在 VS2013 中保持 javascript 函数折叠

c# - 使用 Visual Studio 调试器查看/诊断内存转储中的逻辑 .NET 线程

c# - 在 F# 交互中获取调试器上下文

c++ - OpenMP 任意缩减(合并)

c++ - 如何修改 C++ 中的 const 引用

c - readdir() 如何与 rename() 结合使用?

c - C 中的值是 double 的

c++ - 什么 !在值之前初始化变量时做

c++ - 部署 QFS 时出现身份验证错误