2016-03-26 4 views
0

フリースタンディング環境でGMPを使用することは可能ですか?フリースタンディングプログラムでGMPを使用する

私はベアメタル(オーバーヘッドを減らすため、セキュリティ上の理由から - 外部コードは許可されていません)で動作しなければならないプログラムに取り組んでおり、最小限のカーネルを作成する必要がありますが、GMP任意の大きな整数に対して。私はミニGMPを見てきましたが、実際の(完全な)GMPよりもはるかに遅いです。

ご注意:私はthis質問を見てきました、しかし、OPは、彼がミニGMP満足していたことを特徴とする1以外の答えはないように思える。..

+0

GMPに対して/リンクを使用しようとすると、どのような問題が発生しますか? –

+0

@OliverCharlesworth GMPは通常のプログラムでは正常に動作しますが、-ffreestandingでコンパイルされたプログラムで使用すると、GMP関数が使用されるたびに未定義の参照エラーが報告されます。 – aleks

+0

フリースタンディング環境では必ずしもC標準ライブラリが提供されるとは限りません。そのような環境で標準ライブラリ関数を使用したい場合や、そうしたサードパーティのライブラリを使用する場合は、必要な関数の実装を独自に用意する必要があります。確かに可能ですが、提供される必要がある関数の数がかなり多いことが判明し、実装が適合するように注意する必要があります。 –

答えて

0

あなたは、静的にリンクすることができるはずライブラリをフリースタンディング実行可能ファイルに変換します。より多くのオブジェクトファイルをリンクするのと同じです。

GMPのスタティックバージョン(理想的には-march=atomまたはターゲットハードウェアに適したもの)を構築してください。 libgmp.aをどこかに置き、-Ldirを使用して、コンパイラの場所を教えてください。

私はGMPのためにこれを試していませんので、静的なGMPを構築する上で問題はありませんが、ほとんどのパッケージのビルドスクリプトには静的ライブラリを構築するオプションが含まれています。 (例:--enable-static

関連する問題