cc1plus: ошибка: включайте: Значение, слишком большое для определенного типа данных при компиляции с g ++

Я делаю проект, который должен скомпилировать в Windows и Linux. Я сделал проект в Visual Studio и затем сделал make-файл для Linux. Я создал все файлы в Windows с VS.

Это компилирует и работает отлично в VS, но когда я выполняю make-файл, и это выполняет g ++, я добираюсь

$ g++ -c -I include -o obj/Linux_x86/Server.obj src/Server.cpp
cc1plus: error: include: Value too large for defined data type
cc1plus: error: src/Server.cpp: Value too large for defined data type

Код является не чем иным как Привет Мировым банкоматом. Я просто хотел удостовериться, что все работало, прежде чем я запустил разработку. Я попытался искать, но напрасно.

Любая справка ценилась бы.

24
задан A Jackson 13 March 2010 в 15:34
поделиться

3 ответа

По крайней мере, я нашел решение для Ubuntu. Я, как вы заметили, ошибка возникает только на смонтированных общих ресурсах samba - похоже, это происходит из-за g ++ 'stat'ing файла, индексный дескриптор возвращает очень большое значение.

При монтировании общего ресурса add, nounix, noserverino к параметрам, например:

mount -t cifs -o user=me,pass=secret,nounix,noserverino //server/share /mount

Я нашел информацию по адресу http://bbs.archlinux.org/viewtopic.php?id=85999

35
ответ дан 28 November 2019 в 23:47
поделиться

Я думаю, что ваши параметры g ++ немного неверны или противоречат друг другу.

-c только компиляция
- I каталог ваших включений (простое включение может быть неоднозначным. Попробуйте указать полный путь)
- o Outfile (но -c говорит, что компиляция только)

-1
ответ дан 28 November 2019 в 23:47
поделиться

GNU Core Utils:

27 Значение слишком велико для определенного типа данных

Это означает, что ваша версия утилит не была скомпилирована с включенной поддержкой больших файлов . Утилиты GNU поддерживают большие файлы , если они для этого скомпилированы. Вы можете захотеть скомпилировать их снова и убедиться, что включена поддержка больших файлов. Эта поддержка автоматически настраивается программой autoconf в большинстве систем. Но возможно , что в вашей конкретной системе он не может определить, как это сделать, и поэтому autoconf пришел к выводу, что ваша система не поддерживает большие файлы.

Сообщение «Значение слишком велико для определенного типа данных» - это сообщение об ошибке системы , сообщаемое при попытке выполнения операции с большим файлом с использованием файлов небольшого типа данных. Большие файлы определяются как все, что больше , чем 32-битное целое число со знаком, или, иначе говоря, больше 2 ГБ.

Многие системные вызовы, работающие с файлами, возвращают значения в виде типа данных "long int" . На 32-битном оборудовании long int является 32-битным, поэтому накладывает ограничение на размер файлов в 2 ГБ. Когда это было изобретено, это было ОГРОМНЫМ, и было трудно представить, что понадобится что-то настолько большое. Прошло время, и файлы сегодня могут быть намного больше. В 64-разрядных системах максимальный размер файла обычно составляет 2 ГБ * 2 ГБ. Что мы снова будем считать огромным.

В 32-битной системе с 32-битным «длинным int» вы обнаружите, что не можете увеличить его, а также сохранить совместимость с предыдущими программами.Изменение этого могло бы сломать многое! Но многие системы позволяют переключиться в новый программный режим, который переписывает все файловые операции в 64-битную программную модель. Вместо long они используют новый тип данных под названием "off_t", размер которого составляет 64 бита. Исходный код программы должен быть написан так, чтобы использовать тип данных off_t вместо длинного типа данных. Обычно это делается путем определения -D_FILE_OFFSET_BITS = 64 или чего-то подобного. Это зависит от системы. После этого и после переключения в этот новый режим большинство программ будет нормально поддерживать большие файлы.

См. Следующий вопрос, если вы случайно создали большой файл и теперь нуждаетесь в каком-либо способе с ним справиться.

1
ответ дан 28 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

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