首先披露:我不是 C 程序员。我正在尝试编译一组具有很多血统的 C 和 Fortran 代码,使用 Makefile 生成用于工程计算的可执行文件。我在 sgi Irix (6.5.30) 上使用 gcc 4.7.1。在主程序的编译过程中,首先我收到一条关于“函数‘setenv’的隐式声明”的警告。随后,在生成所有目标“o”文件后,编译以错误结束:
ld32: Error 33: Unresolved data symbol "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)编译测试程序,但我得到了同样的错误:
Unresolved text symbol 'setenv'
有人可以帮助我解决这个错误,我还应该在我的系统和/或环境变量中寻找什么吗?
最佳答案
看起来 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/