Предупреждение компиляции в Python - PullRequest
2 голосов
/ 07 января 2010

когда файл python скомпилирован на машине linux, появляется следующее предупреждение, но тот же файл скомпилирован на машине 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 ]

4 голосов
/ 07 января 2010

Вы используете более старую версию python.

С тех пор стало ясно, что функция tmpnam небезопасна, и библиотеки / заголовки, поставляемые с linux, были обновлены, чтобы дать вам предупреждение. Но он должен скомпилироваться, так как обратная совместимость очень важна.

Python 2.3 был разработан в то время, когда еще не было ясно, что mktemp является проблемой безопасности, а mkstemp, вероятно, недоступен.

Солярис может не иметь такой проблемы, потому что или tmpnam не безопасен на этой платформе, или ваш солярис немного старше.

Если вы хотите избавиться от предупреждения, у вас есть разные возможности:

  • обновление до более новой версии python. Рекомендуется, но может быть невозможно если ваши производственные системы также не обновлены.
  • использовать старую версию linux, которая еще не исправила это (определенно НЕ рекомендуется!)
  • интерпретировать предупреждение как просто предупреждение и знать, что если вы используете tempfile логика в python вы создаете потенциальные проблемы безопасности ...
  • установите уровень предупреждения gcc ниже, чтобы он вас не предупреждал:)

Я бы пошел с апгрейдом, если это возможно, и жил бы с ним иначе.

1 голос
/ 11 апреля 2011

Вы получаете то же самое предупреждение с libpython2.6.a, поэтому предложения по обновлению бесполезны.Только обновление до Python 3 избавляет от предупреждений (см. Ошибку Python 1318), но для некоторых это не вариант.

Один из способов избежать предупреждения - это обратиться к библиотеке, содержащей определения tmpnam_r и tempnam, так чточто его использование в libpython2.6.a соответствует вашим определениям, а не реальным в glibc.Определения в glicb вызывают предупреждения, потому что в libc.so есть секции .gnu.warning.tmpnam_r и .gnu.warning.tempnam, если вы не используете os.tempnam () и os.tmpnam.() Вы можете игнорировать предупреждения.

1 голос
/ 07 января 2010

Может, обновить свой питон? Мол, до 2.6.4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...