170

いくつかのバイナリをコンパイルすると、これらの警告が多数表示されます。

warning: incompatible implicit declaration of built-in function ‘strcpy’
warning: incompatible implicit declaration of built-in function ‘strlen’
warning: incompatible implicit declaration of built-in function ‘exit’

これを解決するために、追加しました

#include <stdlib.h>

次のフラグを使用してコンパイルすることに加えて、この警告に関連付けられている C ファイルの先頭に:

CFLAGS = -fno-builtin-exit -fno-builtin-strcat -fno-builtin-strncat -fno-builtin-strcpy -fno-builtin-strlen -fno-builtin-calloc

GCC 4.1.2 を使用しています。

$ gcc --version
gcc (GCC) 4.1.2 20080704

これらの警告を解決するにはどうすればよいですか?

4

4 に答える 4

282

C では、以前に宣言されていない関数を使用すると、関数の暗黙的な宣言が構成されます。暗黙の宣言では、戻り値の型はint、私が正しく思い出した場合です。現在、GCC にはいくつかの標準関数の定義が組み込まれています。暗黙の宣言が組み込み定義と一致しない場合、この警告が表示されます。

この問題を解決するには、関数を使用する前に関数を宣言する必要があります。通常、適切なヘッダーを含めることでこれを行います。-fno-builtin-*可能であれば、フラグを使用しないことをお勧めします。

stdlib.hの代わりに、次を試してください。

#include <string.h>

少なくとも(2) マニュアルページによれば、ここでstrcpyandが定義されています。strncpystrcpy

ただし、exit関数はstdlib.hで定義されているため、そこで何が起こっているのかわかりません。

于 2009-06-10T18:06:16.040 に答える
16

一部のプログラムの場合、これらのエラーは正常であり、修正する必要はありません。

プログラム phrap をコンパイルするときに、これらのエラー メッセージが表示されます (たとえば)。このプログラムには、いくつかの組み込み関数を変更または置換するコードが含まれています。警告を修正するために適切なヘッダー ファイルを含めると、代わりに GCC が一連のエラーを生成します。したがって、警告を修正すると、ビルドが効果的に中断されます。

正常にコンパイルされるディストリビューションの一部としてソースを取得した場合、エラーは正常である可能性があります。ドキュメントを参照して確認してください。

于 2011-06-21T20:48:47.330 に答える