我使用 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/