Estoy haciendo un proyecto que debe compilar en Windows y Linux. He hecho el proyecto en Visual Studio y, a continuación, hizo un makefile para linux. He creado todos los archivos en Windows con VS.

Compila y se ejecuta perfectamente en el VS pero cuando ejecuto el archivo makefile y se ejecuta g++ I get

$ 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

El código no es más que un Hola Mundo atm. Yo sólo quería asegurarme de que todo estaba funcionando antes de empezar el desarrollo. He intentado buscar, pero fue en vano.

Cualquier ayuda se agradece.

  • Usted no va a obtener una respuesta sin dar a conocer su código, sospecho.
  • Puedes publicar el código de la línea que se queje? También, que g++ para windows estás usando? MinGW, cygwin,…?
  • Este se ejecuta en Linux. Que es la salida que me pasa.
  • Ese es el formato de mensaje de error para EOVERFLOW. Suena como Server.cpp es un enorme archivo (corrección: TU) así Server.obj es demasiado grande.
  • Para Android, usted puede publicar el resultado de cat src/Server.cpp | wc?
  • que no proceso de directivas de preprocesador… g++ -E -I include src/Server.cpp | wc puede hacerlo. Pero puede ser pequeño y aún crear un gran archivo de objeto (plantillas?)
  • Como he dicho, Server.cpp es sólo un hello world atm. Son las 6 líneas de largo. Creo que yo podría haber encontrado el problema, pero no sé por qué. Todo esto está en una carpeta montada desde un recurso compartido de samba a mi ordenador con Windows. He copiado todos los archivos en otro directorio en el equipo con Linux y se detuvo sucediendo. ¿Hay alguna forma de que me puede hacer el trabajo en la carpeta montada?
  • Si es un problema con la monta de fs, entonces probablemente usted no tiene suficientes privilegios de ser montado fs privilegios o en el recurso compartido de windows.

InformationsquelleAutor A Jackson | 2010-03-13

5 Comentarios

  1. 35

    He encontrado una solución en Ubuntu al menos. Yo, como usted ha notado que el error sólo se produce en montar los recursos compartidos de samba – parece venir de la g++ ‘stat ing el archivo, el inodo devuelve un valor muy grande.

    Al montar el compartir agregar ,nounix,noserverino a las opciones, es decir:

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

    He encontrado la info en http://bbs.archlinux.org/viewtopic.php?id=85999

    • Gracias, que parece haber funcionado.
    • La opción nounix no debería ser necesario. Usted sólo puede usar el noserverino opción. He usado ambos y cuando se me fue la compilación de un gran proyecto, todos los archivos se han compilado y no sólo la modificadas.
  2. 2

    He tenido un problema similar. He compilado un proyecto en un CIFS montado recurso compartido de samba. Con un núcleo Linux en la compilación fue realizada, pero con otro kernel de Linux (2.6.32.5), recibí mensaje de error similar: «Valor demasiado grande para el tipo de datos definido». Cuando he utilizado la propuesta de «nounix,noserverino» CIFS opción de montaje, el problema se ha solucionado. Así que en ese caso hay un problema con CIFS de montaje, por lo que el mensaje de error es engañosa, ya que no hay archivos de gran tamaño.

  3. 1

    Principales de GNU Utils:

    27 de Valor demasiado grande para el tipo de datos definido por

    Significa que su versión de las utilidades no fueron compilados con
    soporte de archivos grandes habilitado. Las utilidades GNU hacer de soporte de archivos grandes
    si están compilados para hacerlo. Puede que desee compilar de nuevo y
    asegúrese de que el soporte de archivos grandes es habilitado. Este apoyo es
    configura automáticamente por autoconf en la mayoría de los sistemas. Pero es
    es posible que su sistema no podría determinar cómo
    hacer eso y, por tanto, autoconf la conclusión de que su sistema no
    soporte de archivos grandes.

    El mensaje «Valor demasiado grande para el tipo de datos definido» es un error del sistema
    mensaje reportado cuando una operación en un archivo de gran tamaño se intentó usar
    no archivo de gran tamaño de tipo de datos. Los archivos grandes se define como algo más grande
    que un entero de 32 bits con signo, o dicho de otra forma, de más de 2GB.

    Muchas llamadas al sistema que lidiar con archivos de valores de retorno en un «long int»
    tipo de datos. En hardware de 32 bits un long int es de 32 bits y por lo tanto este
    impone un límite de 2 gb en el tamaño de los archivos. Cuando esto se inventó que
    era ENORME y era difícil concebir que necesita cualquier cosa que los grandes.
    El tiempo ha pasado y los archivos pueden ser mucho mayores hoy en día. En nativo de 64-bits
    sistemas el límite de tamaño de archivo es generalmente de 2 GB * 2 GB. Que vamos a volver
    creo que es enorme.

    En un sistema de 32 bits con una de 32 bits «long int» usted encuentra que usted no puede
    que sea más grande y también mantener la compatibilidad con los anteriores
    programas. Cambio de que iba a romper muchas cosas! Pero muchos de los sistemas
    es posible cambiar en un nuevo programa de modo que reescribe todos
    las operaciones de archivo en un programa de 64 bits modelo. En lugar de «largo»
    se utiliza un nuevo tipo de datos llamado «off_t», que se construye para ser
    De 64 bits de tamaño. El código fuente del programa debe ser escrito para utilizar el off_t
    tipo de datos en lugar del tipo de datos long. Normalmente, esto se hace por
    definición -D_FILE_OFFSET_BITS=64 o algo así. Es dependiente del sistema.
    Una vez hecho esto y una vez que entra en este nuevo modo de la mayoría de los programas
    soporte de archivos de gran tamaño bien.

    Vea la siguiente pregunta si por error ha creado un archivo de gran tamaño
    y ahora necesita alguna manera de lidiar con ella.

    • Me estaba poniendo el «Valor demasiado grande para el tipo de datos definido por» error, tratando de llamar stat. La adición de #define _FILE_OFFSET_BITS 64 a mi código resuelto el problema.
  4. -1

    Creo que el g++ parámetros son un poco fuera de, o en conflicto.

    -c compilar sólo

    -Yo directorio que incluye (simplemente incluyen podría ser ambiguo. Trate de ruta de acceso completa)

    -o outfile (pero -c dice compilar sólo)

    • Creo que están confundiendo a -c con -fsyntax-only.

Dejar respuesta

Please enter your comment!
Please enter your name here