python setup.py build_ext -i
是什么原因造成的,我该如何解决?
BTW,这里是我的安装文件的副本:
#!/usr/bin/env python """ setup.py file for SWIG example """ from distutils.core import setup, Extension example_module = Extension('_foolib', sources=['example_wrap.cxx', '../wrapper++/src/Foo.cpp' ], libraries=["foopp"] ) setup (name = 'foolib', version = '0.1', author = "Me, Myself and I", description = """Example""", ext_modules = [example_module], py_modules = ["example"], )
我在Ubuntu上使用gcc 4.4.3
我可以回答问题的一部分,为什么你得到的消息.您的构建过程中的某些东西正在使用-Wstrict-prototypes选项在C源文件中调用gcc.对于C和Objective-C,这会导致编译器对不声明参数类型的旧式函数声明发出警告.
对于C,这个选项没有意义;这种声明甚至不被语言所允许(原型是强制性的).
(我不知道为什么这个消息提到了Ada; -Wstrict-prototypes对于Ada而言比对C更不了解,这并不是一件很大的事情,但是我提交了this bug report,截至2015-12年为止,已被标记为RESOLVED / FIXED 06.)
解决方案应该是从gcc的调用中删除-Wstrict-prototypes选项.但是由于您没有直接调用gcc,所以很难知道如何做到这一点.
在手动创建一个虚拟的example_wrap.cxx文件后,我可以使用setup.py重现警告:
% 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++ ...
所以这可能是Python的build_ext中的一个小错误.
但由于这只是一个警告,而不是一个致命的错误,我会说你可以安全地忽略它. gcc警告关于无意义的选项,但是它只是忽略它.
编辑:
看看Python-2.7.2源码,configure.in的这一节可能是罪魁祸首:
case $GCC in yes) if test "$CC" != 'g++' ; then STRICT_PROTO="-Wstrict-prototypes" fi
(我假设在使用build_ext时被调用.)
它仅在编译器未被调用为g时才启用-Wstrict-prototypes选项,但在您的情况下,它使用gcc命令来编译C源代码.而在Lib / distutils / command / build_ext.py中,只有在调用self.compiler.link_shared_object()时,build_extension()才会调用self.compiler.compile()时不注意源文件语言. (这似乎是奇怪的;除了gcc之外的编译器,你不一定能够使用相同的命令来编译C和C – 即使你没有链接,使用g命令也是有意义的. )
更新:提交了一个Python错误报告:https://bugs.python.org/issue9031,并作为这个复制的一个关闭:https://bugs.python.org/issue1222585,这仍然是我写的.
但正如我所说,这只是一个警告,你可以安全地忽略它.也许Python维护者可以使用上述信息来在以后的版本中解决问题.