2012-04-22 200 views
3

我已经为MinGW构建了GMP。我使用的IDE是Code :: Blocks。我对GMP的C功能没有任何问题。但我遇到了C++的问题。我试图运行的程序是如此简单,GMP库,C++编译错误,MinGW,Code :: Blocks

#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. 我使用本教程为MinGW构建带有MSYS的GMP。 http://www.cs.nyu.edu/exact/core/gmp/http://suchideas.com/journal/2007/07/installing-gmp-on-windows/
  5. 我使用的GMP版本是5.0.4。

所以,我想知道的是,可能是什么问题?它如何解决? 而且,如果无法解决,并且如果您有5.0.4版本的工作文件,请分享它。 :(

回答

2

我怀疑的命令来建立你的程序规定的顺序弄错了libgmp*库确保libgmp.a库的libgmpxx.a库后指定:

-lgmpxx -lgmp 

如果他们在其他指定的顺序,然后从libgmpxx.a库的依赖拉动的情况下,libgmp.a库将不会被搜索

ld linker's docs on the -l option

链接器将在命令行中指定的位置 处仅搜索一次存档。如果归档文件定义了一个符号 ,该符号在命令行上的归档文件 之前出现的某个对象中未定义,则链接器将从归档文件中包含相应的文件 。但是,稍后在命令行中出现 的对象中的未定义符号将不会导致链接程序再次搜索 存档。

见 - 。(选择一种方式来强制链接器搜索档案 多次

您可以列出在命令行上同一归档多次

+0

由于它解决了问题。我从来没有想过订购是一个问题。:\ 再次感谢。:) – ponir 2012-04-22 16:05:42