私は、GCCコンパイラと組み合わせてfseeko
関数を使用して、Cで4GiBより大きいファイルを処理しようとしています。今ではすべてが機能し、ファイルを扱うことができます4GiB以上であるが、GCCはfseeko
関数が暗黙的に宣言されていると不平を言っている。私はこの警告を修正するために含まれているか、ヘッダーどこにも見つけることができません関数の暗黙の宣言
#define __USE_LARGEFILE64
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#include "MemoryAllocator.h"
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <sys/stat.h>
typedef struct BlockReader {
char* fileName;
// Total filesize of the file with name fileName in bytes.
unsigned long long fileSize;
// Size of one block in bytes.
unsigned int blockSize;
// Defines which block was last read.
unsigned int block;
// Defines the total amount of blocks
unsigned int blocks;
} BlockReader;
unsigned char* blockreader_read_raw_block(BlockReader* reader, long startPos, unsigned int length, size_t* readLength) {
FILE* file = fopen(reader->fileName, "rb");
unsigned char* buffer = (unsigned char*) mem_alloc(sizeof(unsigned char) * (length + 1));
FSEEK(file, startPos, 0);
fclose(file);
// Terminate buffer
buffer[length] = '\0';
return buffer;
}
:これは、このメッセージを生成したソースコードの最小限の実施例です。あなたはこれらの要求は、POSIXインターフェイスは、デフォルトで公開されていない、完全に準拠した標準C環境(さらす、-std=c99
または-std=c11
よう-std
のいずれかのオプションを使用している場合
src/BlockReader.c: In function ‘blockreader_read_block’:
src/BlockReader.c:80:2: warning: implicit declaration of function ‘fseeko’ [-Wimplicit-function-declaration]
FSEEK(file, reader->blockSize * reader->block, 0);
'fseeko'はPOSIX標準ではありませんC – deamentiaemundi
' MemoryAllocator.h'がmem_alloc(x)をmalloc(x)として定義し、FSEEKをfseekoとして定義すると、このプログラムはPOSIXプラットフォームでうまくコンパイルします。ただし、Windowsでビルドしようとしている場合、動作しません。 – NickStoughton
使用しているコンパイラコマンドラインは正確に何ですか?ヘッダをインクルードする前に '_XOPEN_SOURCE'または' _POSIX_C_SOURCE'を適切な値に設定しましたか? –