GMP库,在C++中编译错误,MinGW,Code::Blocks

3

我已经为MinGW构建了GMP。我使用的IDE是Code::Blocks。对于GMP的C函数,我没有任何问题。但是我在C++方面遇到了问题。我尝试运行的程序非常简单,如下所示:

#include<iostream>
#include<gmpxx.h>
using namespace std;

main()
{
    mpz_class a;
    a=12345;
    cout<<"value"<<a<<"\n";
    return 0;
}

我收到的错误信息如下:

F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osmpz.o):osmpz.cc|| undefined reference to `__gmpz_get_str'|
F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osfuns.o):osfuns.cc:(.rdata+0x1c)||undefined reference to `__gmp_asprintf_memory'|
F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osfuns.o):osfuns.cc:(.rdata+0x20)||undefined reference to `__gmp_asprintf_reps'|
F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osdoprnti.o):osdoprnti.cc|| undefined reference to `__gmp_doprnt_integer'|
F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osdoprnti.o):osdoprnti.cc|| undefined reference to `__gmp_asprintf_final'|
||=== Build finished: 5 errors, 0 warnings ===|

现在,还有一些额外的数据:
  1. 我对C函数没有任何问题。如果我删除cout <<语句,文件可以编译并正常运行。问题可能出现在重载运算符上。
  2. libgmpxx.a和libgmp.a已经与编译器链接。这也可以在错误信息中看到...
  3. 问题可能仅出现在libgmpxx.a中。因此,我再次构建了库,但文件仍然相同。
  4. 我使用了这个教程,在MSYS for MinGW上构建GMP。http://www.cs.nyu.edu/exact/core/gmp/ and http://suchideas.com/journal/2007/07/installing-gmp-on-windows/
  5. 我正在使用的GMP版本是5.0.4。
所以,我想知道的是,问题可能是什么?如何解决? 如果无法解决,并且您拥有5.0.4版本的工作文件,请共享它。:(
1个回答

2

我猜测构建程序的命令中,libgmp* 库的顺序有误。请确保在 libgmpxx.a 库之后指定 libgmp.a 库:

-lgmpxx -lgmp

如果它们的顺序不正确,那么在从libgmpxx.a库中引入依赖项时,将不会搜索libgmp.a库。
来自ld链接器关于-l选项的文档: 引用:

链接器仅会在命令行指定的位置搜索一次存档文件。如果存档文件定义了某个未定义的符号,而该符号出现在存档文件之前的某个对象中,则链接器将包括来自存档文件的适当文件。但是,在命令行上后面出现的对象中的未定义符号将不会导致链接器再次搜索存档文件。

有关强制链接器多次搜索存档文件的方法,请参见-(选项)。

您可以在命令行上多次列出同一个存档文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接