4

何らかの理由でコードをコンパイルすると、コンパイラはfsyncとtruncateのプロトタイプを見つけられません。私はこれを手に入れます:

cc -c -Wall -Wno-overflow  -pedantic -std=c99 -I/Users/matt/Programming/BitEagle_Projects/cbitcoin/include -I/usr/local/ssl/include -I/opt/local/include -O3 -arch i386 -arch x86_64 -D_POSIX_SOURCE -fPIC dependencies/storage/CBBlockChainStorage.c -o build/CBBlockChainStorage.o
dependencies/storage/CBBlockChainStorage.c:154:6: warning: implicit declaration of function 'fsync'
      is invalid in C99 [-Wimplicit-function-declaration]
                if(fsync(indexAppend)){
                   ^
dependencies/storage/CBBlockChainStorage.c:649:6: warning: implicit declaration of function
      'truncate' is invalid in C99 [-Wimplicit-function-declaration]
        if (truncate(filename, CBArrayToInt32(data, 0))) {
            ^

これらの警告を削除するにはどうすればよいですか?unistd.hを含めています。これは、clangを使用するOSX上にあります。

$ cc --version
Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

ありがとうございました。

4

1 に答える 1

6

を使用している場合-std=c99、システムヘッダーは、C標準と互換性のある宣言/マクロ名前空間を提供しようとします。これには、POSIXまたはその他の標準または非標準の拡張機能からの追加機能は含まれません。それらを取得するには、適切な機能テストマクロを定義する必要があります。たとえば-D_POSIX_C_SOURCE=200809L、コマンドラインに配置するか、ソースファイルで定義します。

于 2012-12-19T18:44:40.133 に答える