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. このチュートリアルを使用して、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 バージョンの作業ファイルがある場合は、共有してください。:(

4

1 に答える 1

2

プログラムをビルドするコマンドがlibgmp*ライブラリを間違った順序で指定していると思われます。libgmp.aライブラリの後にライブラリが指定されていることを確認しlibgmpxx.aます。

-lgmpxx -lgmp

それらが他の順序で指定されている場合、ライブラリから依存関係を取得するときlibgmpxx.aに、libgmp.aライブラリは検索されません。

オプションldリンカのドキュメント-lから:

リンカーは、コマンド ラインで指定された場所で、アーカイブを 1 回だけ検索します。アーカイブが、コマンド ラインでアーカイブの前に表示されたオブジェクトで未定義のシンボルを定義している場合、リンカーはアーカイブから適切なファイルをインクルードします。ただし、後でコマンド ラインに表示されるオブジェクト内の未定義のシンボルによって、リンカーがアーカイブを再度検索することはありません。

リンカーにアーカイブを複数回検索させる方法については、 -( オプションを参照してください。

コマンドラインで同じアーカイブを複数回リストすることができます。

于 2012-04-22T16:03:37.050 に答える