LNK2001和LNK1120编译X64的动态链接库一个86静态库时(LNK2001 and LNK

2019-10-18 09:56发布

最近我分配到一个C ++项目,虽然我不是一个C ++开发者。 我提供的Visual Studio 2010专业版作为IDE。 所以我给它一个镜头。

我写了一个C ++,它封装了两个静态库动态库(* .DLL)(* .LIB)。 静态库是我们几年前购买了另一家公司的第三方库。 使用dumpbin /header ... CMD电话,我可以说,静态库有下列文件头值:

14C machine (x86)

我得到这个工作在Win32解决方案平台的工作。 我加入了头文件和库到项目中。 该库由写两个包含#pragma comment(lib, ...)语句的.cpp我需要在职能范围内。工程就像一个魅力。 样本函数如下:

extern "C" void OURFreeStringBuf(Cm_StringBuf *sbuf)
{
    FreeStringBuf(sbuf); // the call to the static library
}

这个动态库是在x64体系结构中使用,以及。 所以,我试图解决方案平台设置为64。 现在,我得到的静态库功能(无需进行代码更改或其他配置进行了更改)一个的每个呼叫的以下错误:

error LNK2001: unresolved external symbol "..."

接着是总结错误:

error LNK1120: 29 unresolved external links

难道这些错误是试图在一个64 DLL链接86 LIB文件的结果呢? 是否有机会完成使用提供的静态库这项任务?

预先感谢您非常多。

Answer 1:

你不能 - 换句话说,没有办法到 - 与链接32位库中的64位的可执行文件或DLL(或32位执行以64位DLL或反之亦然)。 你将不得不编译.DLL / .EXE为32位,或者找到32位库的64位版本。 没有其他的解决方案!

该64位体系结构是从在若干方面的32位体系结构不同,但最重要的是地址(指针)是在64位体系结构,这将阻止几乎所有的32位代码在一个正常工作的64位64位环境(因为地址的高32个比特被丢失,这不会产生任何有意义)。



文章来源: LNK2001 and LNK1120 when compiling a x64 dynamic library linking a x86 static library