如何解决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位库之间的一些冲突。尽管我对此不太了解。

我该如何解决这个冲突?

+0

你使用VS吗?如果是这样,你在编译项目是什么? x64还是x86? –

+0

[在发布之前](http://www.catb.org/~esr/faqs/smart-questions.html#before),您应该首先搜索stackoverflow和网页。 – MikeJRamsey56

+0

@ MikeJRamsey56:理解。我现在已经沉没了几个小时,读了谷歌的结果和stackoverflow的答案,可悲的是没有太多的进展 - 认为这是最有效的问我自己的问题。 – john

解决32位和64位兼容问题的一个选项通常是自己编译库的源代码。尽管我对GMP一无所知,但许多C++库使用C​​MAKE或Visual Studio解决方案进行编译。

在GMP的网站,我发现在下载部分:

而不是使用一个版本的,你也可以从 GMP库获得最新的代码。与使用 版本相比,这将需要更多的工作。

有在这里结束了文本“GMP库”链接:这似乎是对自己编译它说明https://gmplib.org/devel/repo-usage.html

在你的情况,似乎你正在使用64位项目,你的GMP分配是32位。另一种解决方案是,如果您不使用额外的资源,只需将项目切换到32位项目。 被警告:如果你这样做,你可能会破坏你的代码。分配给过多长度或其他操作系统特定函数调用的数组可能依赖于64位类型。

+0

感谢Ashwin的这个建议。我以前没有尝试过这种方法,但我会查看您给出的链接上的说明。 – john

+0

@john没问题。祝你好运,我知道得到正确的二进制可能会令人沮丧。我几乎死于尝试freeGLUT:P。如果这有效,请记得接受答案。否则,LMK发表评论,我可能会在明天晚些时候回来给你。 –

+0

谢谢。是的 - 我正处于沉浸了数小时的搜索和尝试各种修复的阶段。这一点有点令人沮丧,但这不是第一次!无论如何,我会在明天之前接受或评论。 – john