Как я могу получить gcc для записи файла размером более 2.0 ГБ?

7

Я хотел перекомпилировать «xxd» (написанный на C), поэтому я установил CodeBlocks в качестве среды IDE.

Кажется, все пошло хорошо, я обнаружил, что я не мог писать за барьер 2.0 ГБ ...

Я читал, что «gcc» нужно перекомпилировать ... (это звучит немного драматично ..)
Я читал, что я могу использовать «fread64 ()» вместо «fread ()» ... (не работал)
Я кое-что прочитал о параметрах компилятора (?) ... но я теряюсь в этот момент?

Я удивлен, что он не работал из-за коробки, так как я думал, что ограничение 2.0 ГБ было древней историей, поскольку по умолчанию идут ... снова неправильно? :(

Моя ОС 32-разрядная, на 32-разрядном оборудовании.
Версия gcc представлена ​​в виде: gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

Есть ли простой способ обойти эту проблему?

PS .. Я был очарован секцией WARNINGS: «info xxd» (... только на Linux;)

    
задан Peter.O 14.01.2011 в 08:36
источник

3 ответа

1

Я рекомендую добавить -D_GNU_SOURCE , если используется #include <features.h> . Это позволит обеспечить поддержку большого файла. Прочтите описание /usr/include/features.h для более подробной информации:

...
_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.
    
ответ дан Kees Cook 15.01.2011 в 05:09
источник
4

Простой #define кажется - это все, что нужно ... (программа записывает данные за 2 ГБ сейчас.)

Возможно, причина, по которой она не была скомпилирована, заключается в том, что я скомпилировал одну программу из гораздо большего набора («xxd» является частью «vim») ...

Если бы я скомпилировал «vim» в toto, это, скорее всего, сработало нормально ...

Итак, для всех, кто приходит на эту страницу, может иметь значение следующее: Я предполагаю, что подобные настройки применимы и к другим 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  

Кроме того, я обнаружил этот фрагмент, в то время как googling для решения ...
Какие макросы предопределены gcc? ... в терминале:

  • touch foo.h; cpp -dM foo.h
ответ дан Peter.O 14.01.2011 в 13:03
0

У меня была такая же проблема - не удалось написать файл размером более 2 ГБ. Моя ОС была 64 бит, точка монтирования была jfs2, а мой fsize = -1 Все, что я сделал, это изменить fopen в моей программе на fopen64 и voila!

    
ответ дан Brian Baumgardner 16.05.2017 в 20:01