2011-12-13 20 views
5

Al compilar el archivo que contiene open("FILENAME", O_RDONLY); sin -O2 marcar todo está bien. Pero cuando se enciende -O2 me sale:gcc -O2 vs. sin causas error

/usr/include/x86_64-linux-gnu/bits/fcntl2.h: In function ‘open’: 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:44:7: error: invalid use of ‘__builtin_va_arg_pack_len()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:45:26: error: call to ‘__open_too_many_args’ declared with attribute error: open can be called either with 2 or 3 arguments, not more 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:42:1: error: invalid use of ‘__builtin_va_arg_pack_len()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:60:3: error: invalid use of ‘__builtin_va_arg_pack()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h: In function ‘open64’: 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:76:7: error: invalid use of ‘__builtin_va_arg_pack_len()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:77:28: error: call to ‘__open64_too_many_args’ declared with attribute error: open64 can be called either with 2 or 3 arguments, not more 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:74:1: error: invalid use of ‘__builtin_va_arg_pack_len()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:92:3: error: invalid use of ‘__builtin_va_arg_pack()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h: In function ‘openat’: 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:120:7: error: invalid use of ‘__builtin_va_arg_pack_len()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:121:28: error: call to ‘__openat_too_many_args’ declared with attribute error: openat can be called either with 3 or 4 arguments, not more 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:118:1: error: invalid use of ‘__builtin_va_arg_pack_len()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:136:3: error: invalid use of ‘__builtin_va_arg_pack()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h: In function ‘openat64’: 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:154:7: error: invalid use of ‘__builtin_va_arg_pack_len()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:155:30: error: call to ‘__openat64_too_many_args’ declared with attribute error: openat64 can be called either with 3 or 4 arguments, not more 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:152:1: error: invalid use of ‘__builtin_va_arg_pack_len()’ 
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:170:3: error: invalid use of ‘__builtin_va_arg_pack()’ 

Dónde puede ser el problema? Es un proyecto mixto C/C++ pero está en la parte C. gcc 4.6.1, 3.0.0 del kernel

Editar: Resulta que commeting a aquellos línea da otro "tipo" de errores como:

/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘sprintf’: 
/usr/include/x86_64-linux-gnu/bits/stdio2.h:34:3: error: invalid use of ‘__builtin_va_arg_pack()’ 
+6

¿Alguna posibilidad de que pueda proporcionar un ejemplo de código mínimo pero completo que desencadene este error? – luiscubal

+0

Extraño, ¿estás seguro de que proviene de esta línea? ¿Incluyes todo lo necesario? (para abierto y O_RDONLY) – BenjaminB

+0

Entonces, ¿llamas 'g ++' o 'gcc'? – 0xC0000022L

Respuesta

2

tratar de compilar con -fno-builtins. Si eso lo soluciona, obviamente tienes algún tipo de problema, pero probablemente no esté en tu fuente.

2

simplemente me gustaría descargar un diferente (un poco ? mayores) construcción del kernel:

Aquí está un informe de error, por lo que vale la pena:

https://bugs.archlinux.org/task/27100

Y no, no tengo ninguna idea de por qué "O2" tendría algo que ver con este error en particular ...

Adición: Este enlace le puede dar una explicación más detallada acerca del mensaje de error en sí. Pero, de nuevo - yo sugeriría probar una diferente construcción del kernel como su primer paso:

http://gcc.gnu.org/ml/gcc-patches/2007-09/msg00675.html

+0

O2 causa errores porque al realizar la optimización, el compilador usa esas funciones integradas. Cuando no está optimizando, está usando las funciones de la biblioteca. –

+0

Generalmente, parte del código que detecta errores pertenece a varias pasadas de optimización. Por lo tanto, el compilador detecta estos errores solo cuando estos pases están habilitados. – janneb

1

Si desea ignorar este error, considere eliminar la marca -Wp,-D_FORTIFY_SOURCE=2. Por ejemplo, si se utiliza rpmbuild, esta bandera se introduce por RPM_OPT_FLAGS

%build 
export CFLAGS="$RPM_OPT_FLAGS" 
export CXXFLAGS="$RPM_OPT_FLAGS" 
./configure … 

Esta es una manera sencilla de mantener todo pero la bandera mencionado

OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed 's/-Wp,-D_FORTIFY_SOURCE=2 //'` 
export CFLAGS="$OPT_FLAGS" 
export CXXFLAGS="$OPT_FLAGS" 
1

llegué a este cuando se trata de recopilar https://www.spec.org/cpu2017/Docs/benchmarks/602.gcc_s.html con GCC.

Irónicamente, el proceso de arranque fallaría debido a que GCC aparentemente no entendía las extensiones de GNU.

Encendiendo -fgnu89-inline eliminé todos los problemas que tenía. Como alternativa, use -std=gnu89.