如何将 32 位 *.lib 文件转换为 64 位 *.a 文件

Posted

技术标签:

【中文标题】如何将 32 位 *.lib 文件转换为 64 位 *.a 文件【英文标题】:How to transform 32 bit *.lib files to 64 bit *.a files 【发布时间】:2021-05-12 10:34:42 【问题描述】:

我目前正在将 32 位 c++ 程序(使用 C++ Builder)移植到 64 位代码。应用程序正在链接第 3 方 dll,并且 32 位编译器项目包含关联的 lib 文件,像往常一样。 在 64 位模式下,这些“.lib”文件需要转换为扩展名为“.a”的档案。我知道有一个转换工具(一个简单的可执行文件)我曾经成功使用过一次。但我不记得那个工具的名字了。有人可以帮我吗?

【问题讨论】:

恕我直言,最好的方法是使用 64 位编译器设置重建库文件。将 32 位库与 64 位库混合使用时,可能会出现许多错误。 这些“.lib”文件需要转换为扩展名为“.a”的档案你很可能会遇到问题尝试即使您可以解决 32 到 64 位问题,也要混合编译器。您可能必须使用要用于您的应用程序的编译器重新构建第三方软件。 @rustyx "在 Windows 上,即使在 64 位模式下,您仍然需要一个 .lib 文件。" - 在 C++Builder 中,甚至在 Windows 上,它的 64 位编译器使用 .a 文件进行 DLL 导入,请参阅 BCC64 和 MKEXP.EXE。 【参考方案1】:

没有将 32 位本机代码转换为 64 位本机代码的工具。也没有工具可以将 cl 库 (.lib) 转换为 gcc 库 (.a)。

【讨论】:

【参考方案2】:

如果您的 32 位 .lib 文件是 DLL 导入库,您可以从 DLL 本身创建新的 64 位导入库。 C++Builder 有一个 MKEXP.EXE 工具用于此目的。

如果您的 32 位 .lib 文件是静态库,则无法将它们从 32 位转换为 64 位,需要使用 64 位编译器重新编译。

【讨论】:

以上是关于如何将 32 位 *.lib 文件转换为 64 位 *.a 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 32 位动态库转换为 64 位的 osx

将 access mde 从 32 位转换为 64 位

Android so文件 报错 32位不能转换成64位

将 32 位 dll 转换为 64 位

将 32 位 android 应用程序转换为 64 位应用程序

如何将其转换为 32 位架构 ARM 程序集