Ошибка компиляции EiffelStudio: использование `tempnam'опасно, лучше использовать`mkstemp'

Я использую eiffelstudio-bin 17.05.100416-1, установленный через AUR в Arch.

Когда я пытаюсь запустить проект hello world по умолчанию, у меня появляется эта ошибка на вкладке Список ошибок:

C Compiler Error: The use of `tempnam' is dangerous, better use `mkstemp'   FILE_NAME.c_tempnam (elks)  132, 4  

Error code: C Compiler Error

Error: External C/C++ compilation failed.
What to do: Check the external C/C++ compilation for details.

The use of `tempnam' is dangerous, better use `mkstemp' 

А на вкладке "Вывод" в разделе "Внешние компиляции":

Preparing C compilation
Compiling C code in C1
Compiling C code in E1
/home/rivamarco/.es/eiffel_user_files/17.05/precomp/spec/linux-x86-64/EIFGENs/base-scoop-safe/W_code/preobj.o(Cobj8.o): in function "F236_6717":
(.text+0x7d19): warning: the use of `tempnam' is dangerous, better use `mkstemp'
C compilation completed

И, конечно же, программа Hello World не работает.

Я использую gcc 7.2.1+20171224-2, если это полезно.

Что я могу сделать?

Заранее спасибо.

0 ответов

Что не работало?

Согласно комментариям, предупреждение не помешало программе работать должным образом. Однако программа была запущена без терминала, и ее вывод не был виден.

Почему я получил предупреждение?

Код стандартной библиотеки кроссплатформенный. Принимая во внимание, что некоторые платформы предоставляют обе функции - одну для создания временного файла и другую для создания имени временного файла, другие предоставляют только вторую. Код Eiffel поддерживал только функцию, доступную на всех платформах, то есть функцию для создания временного имени файла. В какой-то момент функция на первом наборе платформ была помечена как устаревшая. Это привело к появлению предупреждений, подобных указанному в вопросе, но все же позволило коду скомпилировать и запустить без каких-либо изменений на всех платформах.

Чтобы решить эту проблему, среда выполнения была оснащена кодом, имитирующим создание временных файлов на платформах, которые не предоставляли соответствующие функции из коробки. Теперь особенностьmake_open_temporary доступен для создания в потомках класса FILE. КлассFILE_NAMEбыл помечен как устаревший, и его код был обновлен для использования новой функции времени выполнения, что позволило избежать предупреждения компилятора C. В результате в EiffelStudio 19.05 и более поздних версиях предупреждений нет.

Другие вопросы по тегам