Как мне заставить gcc написать файл размером более 2,0 ГБ?

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

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

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

Я удивлен, что это не сработало «из коробки», так как я думал, что ограничение в 2,0 ГБ было древней историей, поскольку дефолты идут ... опять не так? :(

[ 118] Моя ОС 32-битная, на 32-битном оборудовании.
Отчет о версии gcc в виде: gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

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

PS .. Я был очарован ПРЕДУПРЕЖДЕНИЯ: раздел 'info xxd' (..only on Linux;)

7
задан 14 January 2011 в 11:48

3 ответа

Я рекомендую добавить -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.
0
ответ дан 14 January 2011 в 11:48

Простой #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  

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

  • touch foo.h; cpp -dM foo.h
0
ответ дан 14 January 2011 в 11:48

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

0
ответ дан 14 January 2011 в 11:48

Другие вопросы по тегам:

Похожие вопросы: