3

簡単な質問。以前に誰かが書いたコードをEclipseにインポートしています。エラーが発生しました:

"undefined reference to `ceilf'"

私が使用するときceilf。私のファイルに含まれているmath.hライブラリに含まれているceilfと思われます。ただし、/ usr / include / math.hファイルを開くと、ceilfメソッドが定義されていません。実際、私が知る限り、私のredhatデプロイメントのmath.hファイルにはceilfメソッドがありません。わがままなceilf方法が定義されているアイデアはありますか?このコードは機能し、他の場所でコンパイルされるため、問題はコード自体ではなく、私の構成にある必要があります。

ps。ceil通常の方法が使えます。ただ切り替えることを検討しましたが、プログラムのクリティカルパスでは効率が低下します。はい、時期尚早の最適化が悪であることは知っていますが、とにかくエラーが発生する理由については、不思議なことに多くのことを求めています。私のmath.hファイルがそれを汚さない理由がわかりません。

編集::関数が見つからない理由を説明していただきありがとうございますceilf。その問題を理解しています。しかし、日食をなだめる方法がわかりません。提案されているようにstd=c99を使用するようにコンパイラオプションを設定しようとしましたが、エラーは削除されません。実際、eclipseはMakefileを使用してビルドを実行しているだけで、makeファイルは例外をスローしないと思いました。ファイルが定義されていることをエディターに認識させるためにできることはありますか?

4

2 に答える 2

9

ceilfは数学ライブラリの一部であるため、使用するにはとリンクする必要があります-lm。ただ#include <math.h>十分ではありません。

于 2012-06-07T16:14:49.433 に答える
2

マニュアルページによると:

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       ceilf(), ceill():
           _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600 ||
           _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L;
           or cc -std=c99

コンパイラで標準をC99に設定するか、これらの機能テストマクロのいずれかを有効にしてみてください。

また-lm、数学ライブラリをリンクするために、プラットフォームとコンパイラにリンクしていること、または適切なスイッチを使用していることを確認してください。

于 2012-06-07T15:39:35.473 に答える