GCC-O2 против без причины ошибки - PullRequest
5 голосов
/ 13 декабря 2011

При компиляции файла, содержащего open("FILENAME", O_RDONLY); без флага -O2 все в порядке.Но когда -O2 включен, я получаю:

/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 ()’

Где может быть проблема?Это смешанный проект C/C++, но это часть C.gcc 4.6.1, ядро ​​3.0.0

Редактировать: Оказывается, что выделение этих строк дает другой "тип" ошибок, таких как:

/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 ()’

Ответы [ 4 ]

2 голосов
/ 14 декабря 2011

Попробуйте скомпилировать с -fno-builtins. Если это исправит, то у вас, очевидно, возникла какая-то проблема, но, вероятно, ее нет в вашем источнике.

2 голосов
/ 13 декабря 2011

Я бы просто скачал другую (чуть более старую?) Сборку ядра:

Вот отчет об ошибке, во что бы то ни стало:

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

Инет, у меня есть нет представления о том, почему «-O2» может иметь какое-либо отношение к этой конкретной ошибке ...

ДОБАВЛЕНИЕ: эта ссылка может дать вам более подробное объяснение самого сообщения об ошибке.Но опять же - я бы посоветовал попробовать другую сборку ядра в качестве первого шага:

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

1 голос
/ 04 декабря 2017

Я ударил это при попытке скомпилировать https://www.spec.org/cpu2017/Docs/benchmarks/602.gcc_s.html с GCC.

По иронии судьбы, процесс начальной загрузки завершится неудачей из-за того, что GCC явно не понимает расширения GNU.

Включение -fgnu89-inline избавился от любых проблем, которые у меня были.Или используйте -std=gnu89.

1 голос
/ 02 июля 2012

Если вы хотите игнорировать эту ошибку, рассмотрите возможность удаления флага -Wp,-D_FORTIFY_SOURCE=2. Например, если вы используете rpmbuild, этот флаг вводится как RPM_OPT_FLAGS

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

Вот простой способ сохранить все, кроме упомянутого флага

OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed 's/-Wp,-D_FORTIFY_SOURCE=2 //'`
export CFLAGS="$OPT_FLAGS"
export CXXFLAGS="$OPT_FLAGS"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...