EiffelStudio 编译错误:使用 `tempnam' 很危险,最好使用 `mkstemp'
Posted
技术标签:
【中文标题】EiffelStudio 编译错误:使用 `tempnam\' 很危险,最好使用 `mkstemp\'【英文标题】:EiffelStudio compile error: The use of `tempnam' is dangerous, better use `mkstemp'EiffelStudio 编译错误:使用 `tempnam' 很危险,最好使用 `mkstemp' 【发布时间】:2018-01-18 10:56:55 【问题描述】:我在 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。
我能做什么?
提前致谢。
【问题讨论】:
看起来这是一个警告而不是错误,所以应该没有问题。你能运行它吗?还是在尝试执行时遇到另一个错误? tmpnam warning saying it is dangerous的可能重复 @AlexanderKogtenkov 如果我尝试运行 hello world,我会收到该错误(这不是警告,它告诉我这是一个错误)。在另一台 Windows 10 机器上它可以工作(我可以看到 Hello World 消息)执行相同的步骤来运行它。 @Azeem 是的,但我不知道如何管理它,因为它是 EiffelStudio @Azeem (1) Eiffel Studio 似乎没有办法修改 C 编译标志。 (2) 这是一个链接器警告,而不是编译器警告,没有办法让它们静音。 【参考方案1】:什么不工作?
根据 cmets,警告并未阻止程序按预期运行。但是,程序是在没有终端的情况下启动的,它的输出是不可见的。
为什么我会收到警告?
标准库的代码是跨平台的。然而,一些平台提供两种功能——一个用于创建临时文件,另一个用于构建临时文件名——其他平台只提供第二个。 Eiffel 代码仅支持所有平台上可用的功能,即构建临时文件名的功能。在某些时候,第一组平台上的功能被标记为已弃用。这触发了问题中的警告,但仍然允许代码在所有平台上编译和运行而无需任何更改。
为了解决这个问题,运行时配备了模拟在不提供开箱即用的相应功能的平台上创建临时文件的代码。现在,功能 make_open_temporary
可用于在类 FILE
的后代中创建。类FILE_NAME
被标记为过时,其代码已更新为使用新的运行时函数,从而避免了C 编译器警告。因此,在 EiffelStudio 19.05 及更高版本中没有警告。
【讨论】:
以上是关于EiffelStudio 编译错误:使用 `tempnam' 很危险,最好使用 `mkstemp'的主要内容,如果未能解决你的问题,请参考以下文章
g++:错误:/u01/app/oracle/product/11.2.0/xe/lib/lclasses12.zip:Java 编译器未安装在此系统上
Linux重启mysql Error getting authority: Error initializing authority: Could not connect: Resource tem