Я могу ответить на часть вопроса, почему вы получаете сообщение.
Что-то в процессе сборки вызывает gcc для исходного файла C ++ с параметром -Wstrict-prototypes
. Для C и Objective-C это заставляет компилятор предупреждать о объявлениях функций старого стиля, которые не объявляют типы аргументов.
Для C ++ эта опция не имеет смысла; такие объявления даже не разрешены языком (прототипы обязательны).
(я не знаю, почему в сообщении упоминается Ada; -Wstrict-prototypes
имеет еще больший смысл для Ada, чем для C ++. Это не так уж и сложно, но я отправил этот отчет об ошибке , отмеченный ПОСТАНОВЛЕНО / ИСПРАВЛЕНО на 2015-12-06 гг.)
Решением должно быть удаление опции -Wstrict-prototypes
из вызова gcc. Но так как вы не вызываете gcc напрямую, трудно понять, как это сделать.
Я смог воспроизвести предупреждение, используя ваш setup.py
, после того, как вручную создал фиктивный файл example_wrap.cxx
:
% python setup.py build_ext -i
running build_ext
building '_foolib' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c example_wrap.cxx -o build/temp.linux-i686-2.7/example_wrap.o
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++
...
Так что это, вероятно, небольшая ошибка в build_ext
.
Python
Но так как это всего лишь предупреждение, а не фатальная ошибка, я бы сказал, что вы можете спокойно ее игнорировать. gcc предупреждает о бессмысленном параметре, но затем игнорирует его.
EDIT
Просматривая источники Python-2.7.2, этот раздел configure.in
может быть виновником:
case $GCC in
yes)
if test "$CC" != 'g++' ; then
STRICT_PROTO="-Wstrict-prototypes"
fi
(я полагаю, это вызывается при использовании build_ext
.)
Включает опцию -Wstrict-prototypes
, только если компилятор не вызывается как g++
- но в вашем случае он использует команду gcc
для компиляции исходного кода C ++. И в Lib/distutils/command/build_ext.py
, build_extension()
не обращает внимания на язык исходного файла при вызове self.compiler.compile()
, только при вызове self.compiler.link_shared_object()
. (Это кажется странным; для компиляторов, отличных от gcc, вы не обязательно сможете использовать одну и ту же команду для компиляции C и C ++ - и в любом случае имеет смысл использовать команду g++
, даже если вы этого не делаете сшивание.)
ОБНОВЛЕНИЕ: Отчет об ошибке Python был отправлен: https://bugs.python.org/issue9031, и закрыт как дубликат этого: https://bugs.python.org/issue1222585,, который все еще открыт, когда я пишу это.
Но, как я уже сказал, это всего лишь предупреждение, и вы, вероятно, можете смело его игнорировать. Возможно, сопровождающие Python могут использовать вышеуказанную информацию для исправления проблемы в будущем выпуске.