EiffelStudio编译错误:使用`tempnam'很危险,最好使用`mkstemp'

时间:2018-01-18 10:56:56

标签: c++ eiffel mkstemp

我正在通过Arch的AUR安装eiffelstudio-bin 17.05.100416-1。

当我尝试运行默认的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

而且很明显,你好世界计划不起作用。

我正在使用gcc 7.2.1 + 20171224-2,如果它有用。

我该怎么办?

提前致谢。

1 个答案:

答案 0 :(得分:0)

什么不起作用?

根据注释,警告并未阻止程序按预期运行。但是,程序在没有终端的情况下启动,并且其输出不可见。

我为什么收到警告?

标准库的代码是跨平台的。某些平台同时提供这两种功能-一个用于创建临时文件,另一个用于构建临时文件名-其他平台仅提供第二个功能。埃菲尔代码仅支持所有平台上可用的功能,即用于构建临时文件名的功能。在某些时候,第一组平台上的功能被标记为已弃用。这触发了与问题中的警告类似的警告,但仍然允许代码在所有平台上进行编译和运行而无需进行任何更改。

为了解决此问题,运行时配备了可在未提供相应功能的平台上模拟创建临时文件的代码。现在,功能make_open_temporary可用于在类FILE的后代中创建。类FILE_NAME被标记为已过时,并且其代码已更新为使用新的运行时函数,从而避免了C编译器警告。因此,EiffelStudio 19.05及更高版本中没有没有警告。