0

我正在使用通过 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

显然,hello world 程序不起作用。

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

我能做些什么?

提前致谢。

4

1 回答 1

0

什么不工作?

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

为什么我收到警告?

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

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

于 2019-06-30T05:28:56.753 回答