問題タブ [libm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Code::Blocks で静的システム ライブラリ libm.a をリンクします。
以下のコマンドを使用して、シェルでプログラムを正常にコンパイルしました。サンプル バイナリ ファイルが生成され、正常に動作します。
しかし、Code::Blocks でコンパイルしようとするとうまくいきません。プロジェクトのビルド オプションは次のようになります。
コンパイラは 1 つのエラーを返します。
スタティック システム ライブラリのリンクを間違えたようlibm.a
です。どうすればうまくリンクできますか?
ubuntu - コンパイル: //lib/x86_64-linux-gnu/libm.so.6: シンボルの追加エラー: DSO がありません
64 ビット Ubuntu、Linux で 32 ビット UNIX システム向けのコードをコンパイルする際に問題が発生しています。何が問題なのか誰にも考えがありますか?
c - C で pow を使用する場合、CMake は libm にリンクする必要があるかどうかを検出できますか?
一部のコンパイラでは、C プログラムで および特定の他の関数を使用するには、ライブラリpow
m
へのリンクが必要です。ただし、一部のコンパイラはこれを必要とせず、m
ライブラリへのリンクでエラーになります。std::thread
とを使用した C++ にはほぼ同じ状況が存在しpthread
ますが、CMake モジュールFindThreads
はこれを完全に軽減します - libm に同様のモジュールはありますか?
CMakeで何をすべきかを検出する最良の方法は何ですか? これは私の現在の解決策ですが、GCC と MSVC 以外にも多くの C コンパイラがあるため、理想的とは言えません。
これは私の目的には合っていますが、失敗して手動のユーザー介入が必要になる場合があると確信しています。これは、このあいまいさを知らない人にとっては面白くありません。理想的には、ユーザーが自分のコンパイラがおかしいかどうかをコマンドラインから指定する必要がないようにしたいです。これがCMakeの全体的なポイントであるため、CMake内で自動的に検出したいと考えています。
linux - 数学ライブラリを指定せずにsqrtを使用するプログラムがgccでコンパイルされるのはなぜですか
次のプログラムが与えられた場合:
そしてコンパイル:
成功しますか?-lm または /usr/lib/blah/libm.so.x を必要としないのはなぜですか
ldd を使用してバイナリ オブジェクトを検査すると、以下が生成されます。
libm は参照されません。しかし、nm -D を使用して libc.so.6 ライブラリーまたは ld-linux-x86-64.so.2 ライブラリーを見ると、これらのライブラリーには sqrt 関数がありません。
何が起きてる?gcc は魔法のように、一般的な関数のデフォルト セットを含めていますか?
c++ - リンクは arm-none-eabi-g++ では成功しますが、arm-none-eabi-gcc では成功しません
Launchpad Arm コンパイラ ツールを使用しています。具体的には、
arm-none-eabi-g++ および arm-none-eabi-gcc から:
(ARM 組み込みプロセッサ用の GNU ツール) 5.2.1 20151202 (リリース) [ARM/embedded-5-branch リビジョン 231848]
STM32F103 プロセッサを対象とした単純なプログラムがありますが、その目的は、ハードウェアを記述して数学ライブラリから関数を呼び出すことができることを証明することだけです。これがすべてです:
これをビルドしようとすると、sqrt への未定義の参照があることを知らせるリンカー エラーが発生しました。ビルドは arm-none-eabi-gcc で行いました。たまたま、ビルドが arm-none-eabi-g++ で実行され、同じコマンド ライン引数を使用すると、リンクが正常に実行されることがわかりました。
違いを示すために Makefile を書きました。
次の結果が得られます。
では、2 つのコンパイラの動作が異なる理由を誰か教えてもらえますか? 私が見落とした単純なことは何ですか?arm-none-eabi-gcc を使用したい場合、libm などと適切にリンクするにはどうすればよいですか?
Freddie Chopin の makefile を見てきましたが、複雑すぎて解明できません。