2012-04-22 193 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