c - 如何在 C 中使用 setenv 避免此错误?

标签 c gcc posix irix

首先披露:我不是 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/

相关文章:

Android NDK 中通过 SWIG 的 Java 字符串用奇怪的字符代替空字节

shell - 如何以 POSIX 方式实现 'set -o pipefail' - 即将完成,需要专家帮助

c - 我怎样才能同步这个C代码?

Posix 消息队列 - 多作者和多读者

c - 在C中初始化结构内部的数组

c++ - 一个数组中的 Char 和 Int

c - 错误 : initializer element is not constant

c - 为什么 "const extern"报错?

c++ - g++ 在/usr/local/lib 中找不到库

c++ - AVX、SSE 总和比 gcc 自动向量化慢