Подтвердить что ты не робот

Cc1plus: error: include: слишком большое значение для определенного типа данных при компиляции с g++

Я делаю проект, который должен компилироваться в Windows и Linux. Я сделал проект в Visual Studio, а затем сделал makefile для 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

Код - не что иное, как Hello World atm. Я просто хотел убедиться, что все работает до того, как я начал разработку. Я пробовал поиск, но безрезультатно.

Любая помощь будет оценена.

4b9b3361

Ответ 1

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

При установке дополнения share, nounix, noserverino к параметрам, то есть:

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

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

Ответ 2

У меня была аналогичная проблема. Я скомпилировал проект в SAMA, установленном на CIFS. С одним ядром Linux компиляция была выполнена, но с использованием другого ядра Linux (2.6.32.5) у меня появилось подобное сообщение об ошибке: "Значение слишком велико для определенного типа данных". Когда я использовал предложенную опцию монтирования "nounix, noserverino" CIFS, проблема была исправлена. Поэтому в этом случае возникает проблема с установкой CIFS, поэтому сообщение об ошибке вводит в заблуждение, так как больших файлов нет.

Ответ 3

GNU Core Utils:

27 Слишком большое значение для определенного типа данных

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

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

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

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

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

Ответ 4

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

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