2

我最近被分配到一个 c++ 项目,虽然我不是 c++ 开发人员。我获得了 Visual Studio 2010 Professional 作为 IDE。所以我试了一下。

我要编写一个包含两个静态库 (*.lib) 的 c++ 动态库 (*.dll)。静态库是我们几年前从另一家公司购买的第三方库。使用dumpbin /header ...cmd 调用,我可以说这两个静态库都具有以下文件头值:

14C machine (x86)

我让这个任务为 Win32 解决方案平台工作。我将头文件和库添加到项目中。这些库是通过在.cpp 中编写两个#pragma comment(lib, ...)语句来包含的,我需要这些函数。就像一个魅力。示例函数如下所示:

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

这个动态库也将用于 x64 架构。所以我尝试将解决方案平台设置为x64。现在,对于静态库函数之一的每次调用,我都会收到以下错误(没有进行代码更改或其他配置更改):

error LNK2001: unresolved external symbol "..."

接着是一个总结错误:

error LNK1120: 29 unresolved external links

这些错误可能是尝试在 x64 dll 中链接 x86 lib 文件的结果吗?是否有机会使用提供的静态库完成此任务?

非常感谢您提前。

4

1 回答 1

7

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

64 位架构在几个方面与 32 位架构不同,但最重要的是,64 位架构中的地址(指针)是 64 位的,这会阻止几乎任何 32 位代码在一个64 位环境(因为地址的高 32 位丢失,不会产生任何有意义的东西)。

于 2013-07-22T11:48:57.163 回答