第一次公开:我不是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/