2016-11-28 23 views
1

私はC++プロジェクトでGNU Multiple Precision(GMP)ライブラリを使用しようとしています。私は(g++ project.cppを使用して)私のコードをコンパイルしようとすると、私は次のような出力を得る:関連の質問を読んでから32ビットと64ビットのGMPライブラリの競合を解決するにはどうすればよいですか?

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:分かりました。私は、悲しいことに、多くの進歩なしに、Googleの結果とstackoverflowの回答を読んで、私はいくつかの時間を沈んだところにいる - それは最も効率的な自分の質問をこの時点で尋ねたと思った。 – john

答えて

0

32ビットおよび64ビットの可用性に関する問題を解決する一般的な選択肢の1つは、ライブラリのソースコードを自分でコンパイルすることです。私はGMPについて何も知らないが、多くのC++ライブラリはCMAKEやVisual Studioのソリューションを使ってコンパイルする。

はGMPのウェブサイトで、私は、ダウンロードセクションの下に:

代わりのリリースを使用して、あなたはまた、 GMPリポジトリから最新のコードを取得することがあります。これには、 リリースを使用する場合と比較して、さらに多くの作業が必要になります。 https://gmplib.org/devel/repo-usage.html

これらは、それを自分でコンパイルする手順のように見える:

はここで終わるテキスト「GMPリポジトリ」にリンクがあります。

あなたの場合は、64ビットプロジェクトで作業しているようですが、GMPの配布は32ビットです。もう1つの解決策は、余分なリソースを使用していない場合は、プロジェクトを32ビットプロジェクトに簡単に切り替えることです。 警告:すれば、コードが壊れる可能性があります。余分な長さに割り当てられた配列または他のOS固有の関数呼び出しは、64ビット型に依存している可能性があります。

+0

この提案をありがとうAshwin。私はこれまでこのようなアプローチを試みていませんでしたが、あなたが与えたリンクで指示を調べます。 – john

+0

@john問題ありません。幸運にも、私は正しいバイナリを得ることがイライラすることがあることを知っています。私は自由になるために殆ど亡くなりました.GLUT:P。これが機能する場合は、その答えを受け入れることを忘れないでください。そうでなければ、LMKにコメントをして、私はおそらくあなたのところに戻ってきます。ありがとう。 –

+0

ありがとう。はい - 私は検索やさまざまな修正を試みるために何時間も沈んだ段階です。この時点で少しイライラしますが、初めてではありません!とにかく、私は明日までに受け入れるか、コメントします。 – john

関連する問題