なぜこれが「floor」への未定義の参照をスローするのか理解できません":
double curr_time = (double)time(NULL);
return floor(curr_time);
フロアが受け取るものであるダブルにキャストされていませんか?
たぶん、数学ライブラリとリンクしていないからですか?エラーはキャストやデータ型とは何の関係もありません。
おそらく、ライブラリに明示的にリンクする必要があります。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」という名前のライブラリが検索されます。