Como posso fazer com que o gcc escreva um arquivo maior que 2.0 GB?

7

Eu queria recompilar 'xxd' (escrito em C), então eu instalei CodeBlocks como o IDE.

Tudo parecia ir bem até que descobri que não podia escrever além da barreira de 2,0 GB ...

Eu li que o 'gcc' precisa ser recompilado ... (Isso soa um pouco dramático ..)
Eu li que eu posso usar 'fread64 ()' em vez de 'fread ()' ... (não funcionou)
Eu li algo sobre as opções de um compilador (?) ... mas eu me perco nesse ponto?

Estou surpreso que ele não tenha funcionado bem, já que achei que o limite de 2,0 GB era história antiga, já que os padrões vão ... errados de novo? :(

Meu sistema operacional é de 32 bits, em hardware de 32 bits. O relatório da versão gcc em como: gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

Existe uma maneira simples de contornar esse problema?

PS .. Fiquei fascinado com a seção WARNINGS: do 'info xxd' (somente no Linux;)

    
por Peter.O 14.01.2011 / 09:36

3 respostas

1

Eu recomendo adicionar -D_GNU_SOURCE , contanto que #include <features.h> seja usado. Isso habilitará todo o suporte a arquivos grandes. Leia o início de /usr/include/features.h para mais detalhes:

...
_LARGEFILE_SOURCE    Some more functions for correct standard I/O.
_LARGEFILE64_SOURCE  Additional functionality from LFS for large files.
_FILE_OFFSET_BITS=N  Select default filesystem interface.
....
_GNU_SOURCE      All of the above, plus GNU extensions.
    
por Kees Cook 15.01.2011 / 06:09
4

Um simples #define parece ser tudo o que é necessário .. (o programa grava 2 GB agora.)

Talvez o motivo pelo qual ele não tenha sido compilado apropriadamente, é que eu compilei um único programa a partir de um conjunto muito maior ('xxd' é parte do 'vim') ...

Se eu tivesse compilado 'vim' no total, provavelmente teria funcionado bem ...

Portanto, para qualquer pessoa que visite esta página, o seguinte pode ser de algum valor:
Presumo que configurações semelhantes se aplicariam a outros IDEs.

Adding #defines

* Using CodeBocks (as a global setting)
  =====================================
  Settings
    Compiler and Debugger...
      [Compiler Settings]
        [#defines] ... Add the following
         _FILE_OFFSET_BITS="64"

* Using CodeBlocks (for a given Project)
  ======================================
  Properties
    Build Options
      [Compiler Settings]
        [#defines] ... Add the following
         _FILE_OFFSET_BITS="64"

* Directly into gcc's command line
  ================================
  gcc -D_FILE_OFFSET_BITS="64"

* Add a #define directly to the source
  ====================================
  #define _FILE_OFFSET_BITS  64  

Além disso, descobri esse snippet enquanto pesquisava a solução ...
Quais macros são predefinidas pelo gcc? ... no terminal:

  • toque em foo.h; cpp -dM foo.h
por Peter.O 14.01.2011 / 14:03
0

Eu tive o mesmo problema - não consegui escrever um arquivo com mais de 2 GB. Meu sistema operacional era 64 bits, o ponto de montagem era jfs2 e meu fsize = -1 Tudo que fiz foi mudar o fopen no meu programa para fopen64 e voila!

    
por Brian Baumgardner 16.05.2017 / 22:01

Tags