我使用Visual Studio 2008将一些外部C++代码编译到dll,thirdpartycode.dll中。代码被封装在extern“C”中。使用Visual Studio 2008从x86编译x64 dll:无法解析的外部__imp_符号
由于我正在交叉编译,在我的32位机器上创建一个64位的DLL;我在“配置管理器”中将x64用作“主动解决方案平台”。
我的thirdpartycode.dll编译并链接成功。 接下来,我想创建另一个dll,其中包含调用thirdpartycode.dll的代码: wrapper.dll。 正如名称所示,它是一个简化对thirdpartycode.dll中复杂API的某些调用的包装。 然后我打算从C#程序调用wrapper.dll。我的问题是当我尝试链接我的wrapper.dll时,我得到未解决的符号:-(。 对于thirdpartycode.dll中的每个函数,例如“func1”;我得到一个无法解析的外部符号“__imp_func1” 。使用的Dependency Walker我确认thirdpartycode.dll indeeed不出口“FUNC1”。
我待办事项thirdpartycode.lib中的“其他的依赖”。我已经打开/冗长,可以看到thirdpartycode.lib搜索。
如果我重复这整个过程,但使用x86作为“主动解决方案平台”的东西很好用!?
任何想法出了什么问题?
__imp_前缀来自哪里? 这有点令人困惑,因为对于故障排除,我会使用Dependency Walker将来自thirdpartycode.dll的导出符号与使用dumpbin的wrapper.obj中的所需符号进行比较。
在此先感谢您的任何答案!
什么是未解决的符号名称?他们是系统功能还是来自第三方代码(即外部库)? – rubenvb 2010-07-22 08:38:42
他们来自第三方代码。 – 2010-07-22 08:59:23
对不起,我忘记提及第三方代码使用Windows系统库。 当我在Dependency Walker(depends.exe)中打开它时,我发现一些奇怪的东西:我的dll被标记为64位。然而,我的DLL依赖于C:\ windows \ system32 \ ntdll.dll和C:\ windows \ system32 \ kernel32.dll这是32位!因此,Dependency Walker给我提供了以下错误:“错误:由于隐式依赖模块中缺少导出函数,导致至少有一个模块导入了未解析的错误。错误:找到了具有不同CPU类型的模块。 – 2010-07-23 11:32:28