Я пытаюсь использовать функцию fseeko
в сочетании с компилятором GCC для работы с файлами размером более 4GiB в C. Теперь все работает, и я могу работать с файлами более 4GiB, но GCC продолжает жаловаться, что функция fseeko
неявно объявлена. Это минимальный рабочий пример исходного кода, который генерирует это сообщение:Неявное объявление функции 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;
}
Я не могу найти где-нибудь, что заголовок я должен включить, чтобы исправить это предупреждение. Точное предупреждение, что дает GCC это:
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' соответствующее значение, прежде чем включать какие-либо заголовки? –