基本的に、次の 2 つのタスクを完了する必要があります。
- fdlibm ソースをコンパイルして、目的に適したオブジェクト モジュールを生成する必要があります。
- オブジェクト モジュールを他のオブジェクト モジュールとリンクする必要があります。
最初のタスクには 2 つの問題があります。1 つ目は、fdlibm などのプロジェクトのソースは通常、多くのシステムに移植できるように作成されており、構成にかなりの作業が必要になる場合があることです。非常に単純な C または C++ コードではなく、いくつかのプリプロセッサ条件を使用して特定のオプションを選択する場合があり、ソースが含まれるパッケージには、コンパイルのさまざまな準備を行うためのスクリプトが含まれる場合があります。
2 つ目は、ソースが C++ 標準の宣言sin
との仕様に一致するようにすることですcos
。あなたが持っている fdlibm パッケージが C++ をサポートしている場合、これはあなたの側での作業を必要としないかもしれません。それ以外の場合は、ソースを変更してsin
とのcos
定義を std 名前空間内にラップするか、ソースを変更する必要があります。
2番目の問題はリンクです。ライブラリを使用する必要はありません。を含むソース ファイルをコンパイルしてオブジェクト モジュール (またはモジュール)sin
をcos
生成し、そのオブジェクト モジュール (またはモジュール) を他のオブジェクト モジュールにリンクするだけです。必要に応じて、代わりにライブラリを作成し、オブジェクト モジュールを配置してsin
、cos
ライブラリに追加し、ライブラリをオブジェクト モジュールにリンクします。ほとんどの一般的なリンカでは、オブジェクト モジュールをリストするのと同じ方法で、ライブラリをリンカの入力としてリストするだけで、ライブラリをオブジェクト モジュールとリンクできます。(リンカーによっては、ライブラリを参照するための他のオプションもありますが、通常は通常のファイル パスを指定するだけで十分です。) 必要に応じて、静的ライブラリまたは動的ライブラリのいずれかを作成およびリンクできます。動的ライブラリを使用する場合は、実行可能ファイルの実行時に存在する必要があります。自分で使用する単純なアプリケーションの場合、動的ライブラリを使用する必要はありません (または静的ライブラリを使用する必要さえありません。オブジェクト モジュールは問題ありません)。(基本的に、ライブラリの目的は、オブジェクト モジュールを他の人に簡単に配布したり、大規模なプロジェクトを編成したりすることです。単純なアプリケーションにはライブラリは必要ありません。)
リンクに関するもう 1 つの注意事項: 独自の sin と cos を指定すると、リンカは次の 2 つの実装から選択できます: sin と cos の独自の実装と、sin と cos の標準ライブラリの実装です。通常、標準ライブラリはユーザー指定のファイルの後にリンクされるため、オブジェクト モジュールまたはライブラリを指定するだけで、ライブラリの sin と cos ではなく、sin と cos が確実に使用されるようになります。そうでない場合は、ライブラリが考慮される順序を変更するリンカー オプションが必要です。