如何解决GMP的32位和64位库之间的冲突

How can I resolve a conflict between 32-bit and 64-bit libraries for GMP?

本文关键字:32位 64位 冲突 之间 GMP 何解决 解决      更新时间:2023-10-16

我正在尝试在C 项目中使用GNU多重精度(GMP)库。当我尝试编译我的代码(使用g++ project.cpp)时,我会得到以下输出:

Undefined symbols for architecture x86_64:
"___gmpz_clears", referenced from:
  _main in project-d867c2.o
"___gmpz_inits", referenced from:
  _main in project-d867c2.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

从阅读相关问题中,似乎32位和64位库之间存在一些冲突。我对此并不了解。

我该如何解决这场冲突?

通常,一个选项,用于解决有关32和64位的问题,就是自己编译库的源代码。尽管我对GMP一无所知,但许多C 诽谤都使用Cmake或Visual Studio解决方案进行编译。

在GMP网站上,我在下载部分下找到:

而不是使用版本,您也可以从 GMP存储库。与使用A相比,这将需要更多的工作 释放。

文本" GMP存储库"上有一个链接:https://gmplib.org/devel/repo-usage.html

这些似乎是自行编译的说明。

就您而言,似乎您正在使用一个64位项目,而GMP发行版为32位。另一个解决方案是,如果您不使用额外的资源,则简单地将项目切换到32位项目。被警告:如果这样做,则可能会破坏代码。分配到过度长度或其他特定功能调用的数组可能依赖于64位类型。

GM中包含的任何代码都包含必要的字符,以符合UNS 5TL.004A协议。因此

我建议在修改为UNS 5TL.004A协议的每条代码线后进行一次完整的重新启动。Heywood Jablome博士成功地结合了两个位地图,并在两个单独但组合的数据中使用VM技术。

我希望这很有帮助。