Ich versuche, die fseeko
Funktion in Kombination mit dem GCC-Compiler zu verwenden, um mit Dateien zu arbeiten, die größer als 4GiB in C sind. Jetzt funktioniert alles und ich kann mit Dateien arbeiten von über 4GiB, aber GCC beschwert sich, dass die fseeko
Funktion implizit deklariert wird. Dies ist ein minimal Arbeitsbeispiel der der Quellcode, der diese Nachricht erzeugt:Implizite Erklärung der Funktion 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;
}
ich nirgendwo finden können, was Header muss ich schließen diese Warnung zu beheben. Die genaue Warnung, dass GCC gibt, ist dies:
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' ist in Posix, nicht Standard C – deamentiaemundi
Angenommen,' MemoryAllocator.h' definiert mem_alloc (x) als malloc (x) und FSEEK als fseeko, dann kompiliert dieses Programm auf einer POSIX-Plattform. Wenn Sie jedoch versuchen, auf Windows aufzubauen, wird es nicht funktionieren. – NickStoughton
Was genau ist die Compiler-Befehlszeile, die Sie verwenden? Haben Sie '_XOPEN_SOURCE' oder' _POSIX_C_SOURCE' auf einen geeigneten Wert gesetzt, bevor Sie Header einfügen? –