第一次披露:我不是一个 C 程序员。我正在尝试编译一组具有很多血统的 C 和 Fortran 代码,使用 Makefile 生成用于工程计算的可执行文件。我在 sgi Irix (6.5.30) 上使用 gcc 4.7.1。在编译主程序期间,首先我收到关于“函数'setenv'的隐式声明”的警告。随后,在生成所有目标“o”文件后,编译以错误结束:
ld32:错误 33:未解析的数据符号“setenv”
注释掉定义“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;
}
根据我在堆栈交换和其他网站上使用谷歌搜索时发现的所有建议,我尝试包含不同的标题,例如
#define _POSIX_C_SOURCE
和
#define _GNU_SOURCE
在任何#define 语句之前。我也尝试过编译,并且-std=c99
没有运气。-D_XOPEN_SOURCE
-D_GNU_SOURCE
我还尝试使用 Irix 的本机 C 编译器(cc 和 c99)编译测试程序,我得到了同样的错误:
未解析的文本符号“setenv”
有人可以提供帮助我应该在我的系统和/或环境变量中寻找什么以解决此错误吗?