gpt4 book ai didi

c++ - 编译链接 x86 静态库的 x64 动态库时的 LNK2001 和 LNK1120

转载 作者:行者123 更新时间:2023-12-04 13:54:35 26 4
gpt4 key购买 nike

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

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

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 库文件的结果吗?是否有机会使用提供的静态库完成此任务?

非常感谢您。

最佳答案

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

64 位架构在几个方面不同于 32 位架构,但最重要的是,地址(指针)在 64 位架构中是 64 位的,这使得几乎任何 32 位代码都无法工作在 64 位环境中正确(因为地址的高 32 位丢失,这不会产生任何有意义的东西)。

关于c++ - 编译链接 x86 静态库的 x64 动态库时的 LNK2001 和 LNK1120,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17786567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com