0

なぜこれが「floor」への未定義の参照をスローするのか理解できません":

double curr_time = (double)time(NULL);
return floor(curr_time);

フロアが受け取るものであるダブルにキャストされていませんか?

4

3 に答える 3

7

悪名高い-lm問題に遭遇した可能性があります: Compile as:

gcc yourfile.c -o out -lm 

これもC FAQ 14.3の項目です。

于 2010-03-15T18:03:42.283 に答える
5

たぶん、数学ライブラリとリンクしていないからですか?エラーはキャストやデータ型とは何の関係もありません。

于 2010-03-15T18:03:01.223 に答える
2

おそらく、ライブラリに明示的にリンクする必要があります。UNIXライクなシステムでは、これは通常「/usr/lib/libm.a」になります。C標準ライブラリはデフォルトでリンクされているはずですが、システムによっては、数学ライブラリはリンクされておらず、明示的にリンクする必要がある場合があります。(たとえば、Mac OS Xでは、デフォルトでubuntuシステムにもリンクされています)。

これは、インクルードパスとは関係がないことに注意してください。UNIXライクなものを使用している場合は、「/ usr / include / math.h」の下にプロトタイプ宣言のあるヘッダーがあり、コンパイラーは常にヘッダーを検索します。

gccを使用している場合は、次のいずれかと直接リンクできます。

gcc yourfile.c /usr/lib/libm.a -o out

または次のように「-lnameroflibrary」を使用します。

gcc yourfile.c -lm -o out

これにより、C標準ライブラリと同じディレクトリで「libnameoflibrary.a」という名前のライブラリが検索されます。

于 2010-03-15T18:28:30.610 に答える