第一次公开:我不是C程序员。我正在尝试使用Makefile生成用于工程计算的可执行文件,以非常多的谱系编译一组C和Fortran代码。我在sgi Irix(6.5.30)上使用gcc 4.7.1。在主程序的编译过程中,首先我得到关于“函数'setenv'的隐式声明”的警告。随后,在生成所有目标“o”文件之后,编译以错误结束:



注释掉定义了“setenv”的一行,可以使编译成功并生成可执行文件。但是,setenv的这一行对于该程序至关重要。

这导致我编写了一个测试代码并确认了相同的问题:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int main()
{
   setenv("FILE","/usr/bin/example.c",50);
   printf("File = %s\n", getenv("FILE"));
   return 0;
}

根据我在堆栈交换和其他站点上进行谷歌搜索时发现的所有建议,我尝试包括不同的 header ,例如
#define _POSIX_C_SOURCE


#define _GNU_SOURCE

在任何#define语句之前。我也尝试使用-std=c99以及-D_XOPEN_SOURCE-D_GNU_SOURCE进行编译,但没有运气。

我还尝试使用Irix的 native C编译器(cc和c99)编译测试程序,但出现相同的错误:



有人可以帮忙解决我在系统和/或环境变量中寻找的其他内容,以解决此错误吗?

最佳答案

确实看起来IRIX libc不支持setenv()命令。您将必须使用putenv()重写它,如下所示:

putenv("FILE=/usr/bin/example.c");

另请参见IRIX putenv() manpage。在寻找setenv()时没有显示任何匹配,因此我想这个函数是丢失的(注意:IRIX 6.5.30是2006年的)

关于c - 如何使用C中的setenv避免此错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52668364/

10-11 18:37