Come posso ottenere gcc per scrivere un file più grande di 2.0 GB?

7

Volevo ricompilare 'xxd' (scritto in C), quindi ho installato CodeBlocks come IDE.

Tutto sembrava andare bene fino a quando ho scoperto che non potevo scrivere oltre la barriera di 2,0 GB ...

Ho letto che 'gcc' deve essere ricompilato ... (Sembra un po 'drammatico ..)
Ho letto che posso usare 'fread64 ()' invece di 'fread ()' ... (non ha funzionato)
Ho letto qualcosa sulle opzioni del compilatore (?) ... ma a quel punto mi perdo?

Sono sorpreso che non abbia funzionato subito, poiché pensavo che il limite di 2.0 GB fosse storia antica, fino a quando i valori predefiniti non tornano ... di nuovo in errore? :(

Il mio sistema operativo è a 32 bit, su hardware a 32 bit.
La versione gcc riporta come: gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

C'è un modo semplice per risolvere questo problema?

PS .. Ero affascinato dalla sezione WARNINGS: di 'info xxd' (..solo su Linux;)

    
posta Peter.O 14.01.2011 - 09:36

3 risposte

1

Raccomando di aggiungere -D_GNU_SOURCE finché viene utilizzato #include <features.h> . Ciò abiliterà tutto il supporto per file di grandi dimensioni. Leggi l'inizio di /usr/include/features.h per ulteriori dettagli:

...
_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.
    
risposta data Kees Cook 15.01.2011 - 06:09
4

Un semplice #define sembra essere tutto ciò che è necessario .. (il programma scrive oltre 2 GB ora.)

Forse la ragione per cui non è stata compilata in modo appropriato, è che ho compilato un singolo programma da una suite molto più grande ('xxd' è parte di 'vim') ...

Se avessi compilato 'vim' in toto, molto probabilmente avrebbe funzionato bene ...

Quindi per chiunque visiti questa pagina, il seguente potrebbe essere di qualche valore:
Presumo che impostazioni simili si applicherebbero ad altri IDE.

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  

Inoltre, ho scoperto questo frammento mentre cercavo su google per la soluzione ...
Quali macro sono predefinite da gcc? ... nel terminale:

  • touch foo.h; cpp -dM foo.h
risposta data Peter.O 14.01.2011 - 14:03
0

Ho avuto lo stesso problema: non ero in grado di scrivere un file più grande di 2 GB. Il mio sistema operativo era 64 bit, il punto di mount era jfs2 e my fsize = -1 Tutto quello che ho fatto è stato cambiare fopen nel mio programma per fopen64 e voilà!

    
risposta data Brian Baumgardner 16.05.2017 - 22:01

Leggi altre domande sui tag