Python中的编译警告
在Linux机器上编译一个Python文件时,会看到以下警告,但在Solaris机器上编译同样的文件时,就没有这个警告。
/opt/swe/tools/ext/gnu/python-2.3.5_p1/i686-linux2.4/lib/python2.3/config/libpython2.3.a(posixmodule.o)(.text+0x3e9a): In function `posix_tmpnam':
./Modules/posixmodule.c:6138: warning: the use of `tmpnam_r' is dangerous, better use `mkstemp'
/opt/swe/tools/ext/gnu/python-2.3.5_p1/i686-linux2.4/lib/python2.3/config/libpython2.3.a(posixmodule.o)(.text+0x3de9): In function `posix_tempnam':
./Modules/posixmodule.c:6093: warning: the use of `tempnam' is dangerous, better use `mkstemp'
我无法解决上面的警告内容。
有没有人能帮忙呢?
3 个回答
1
你会发现使用libpython2.6.a时也会出现相同的警告,所以建议升级的办法并没有什么帮助。只有升级到Python 3才能消除这些警告(参见Python的bug 1318),但对某些人来说,这并不是一个可行的选择。
避免这个警告的一种方法是链接到一个提供tmpnam_r和tempnam定义的库,这样libpython2.6.a中对它们的使用就会指向你自己的定义,而不是glibc中的真实定义。glibc中的定义会触发警告,因为libc.so中有.gnu.warning.tmpnam_r和.gnu.warning.tempnam的部分。
如果你实际上并不使用os.tempnam()和os.tmpnam(),那么你可以忽略这些警告。
1
你可以试着更新一下你的Python版本,比如更新到2.6.4。
4
你正在使用一个较旧版本的Python。
现在大家都知道,tmpnam这个函数并不安全,因此Linux系统中的库和头文件已经更新,会给你发出警告。不过,它应该还是能编译通过,因为向后兼容性是非常重要的。
Python 2.3开发的时候,大家还没有意识到mktemp是个安全问题,而且mkstemp这个函数可能还没有出现。
Solaris系统可能不会有这个问题,因为在那个平台上,tmpnam可能是安全的,或者你的Solaris版本比较旧。
如果你想去掉这个警告,有几种选择:
- 升级到更新的Python版本。这是推荐的做法,但如果你的生产系统没有升级的话,可能就做不到。
- 使用一个旧版本的Linux,这个版本还没有修复这个问题(绝对不推荐!)
- 把这个警告当成一个普通的警告来看,知道如果你在Python中使用tempfile的逻辑,可能会引发安全问题……
- 把gcc的警告级别调低,这样就不会给你发警告了 :)
如果可能的话,我建议你升级,如果不行就只能忍受这个警告了。