如何解决GMP的32位和64位库之间的冲突?
问题描述:
我想在C++项目中使用GNU Multiple Precision(GMP)库。当我尝试编译我的代码(使用g++ project.cpp
)我得到以下的输出:如何解决GMP的32位和64位库之间的冲突?
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库获得最新的代码。与使用 版本相比,这将需要更多的工作。
有在这里结束了文本“GMP库”链接:这似乎是对自己编译它说明https://gmplib.org/devel/repo-usage.html
。
在你的情况,似乎你正在使用64位项目,你的GMP分配是32位。另一种解决方案是,如果您不使用额外的资源,只需将项目切换到32位项目。 被警告:如果你这样做,你可能会破坏你的代码。分配给过多长度或其他操作系统特定函数调用的数组可能依赖于64位类型。
你使用VS吗?如果是这样,你在编译项目是什么? x64还是x86? –
[在发布之前](http://www.catb.org/~esr/faqs/smart-questions.html#before),您应该首先搜索stackoverflow和网页。 – MikeJRamsey56
@ MikeJRamsey56:理解。我现在已经沉没了几个小时,读了谷歌的结果和stackoverflow的答案,可悲的是没有太多的进展 - 认为这是最有效的问我自己的问题。 – john