error: 'gets' undeclared here (not in a function)

出现问题

编译安装m4-1.4.16.tar.gz
wget http://ftp.gnu.org/gnu/m4/m4-1.4.16.tar.gz
tar xvf m4-1.4.16.tar.gz
./configure
make

报错提示:error: 'gets' undeclared here (not in a function)

解决办法:

[root@localhost m4-1.4.16]# vi lib/stdio.in.h
查找字段:gets is a security hole
注释
将_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); 字段和他之前的注释 /* 一块注释掉,如下

/* It is very rare that the developer ever has full control of stdin,
   so any use of gets warrants an unconditional warning.  Assume it is
   always declared, since it is required by C89.
#undef gets
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); */

再添加如下内容:

#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)

_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

#endif

再重新编译安装

make
make install

转载于:https://blog.51cto.com/5065548971213/2114389

### 解决 'nvmlDeviceSetFanControlPolicy' 未声明的编译错误 当遇到 `nvmlDeviceSetFanControlPolicy` 函数未声明的编译错误时,通常是因为缺少必要的头文件或者链接库配置不正确。以下是详细的解决方案: #### 1. 确认是否支持该函数 NVIDIA NVML (NVIDIA Management Library) 提供了一系列用于管理 GPU 的接口,但并非所有版本都支持所有的功能。`nvmlDeviceSetFanControlPolicy` 并不是标准 NVML 库中的公开函数[^1]。如果确实需要此功能,则可能需要联系 NVIDIA 获取扩展文档或确认其可用性。 #### 2. 正确引入头文件 确保在项目中包含了正确的 NVML 头文件。NVML 的主要头文件通常是 `nvml.h`,可以通过以下方式包含它: ```cpp #include "nvml.h" ``` 如果没有找到该头文件,请检查 NVIDIA 驱动安装路径下的 SDK 文件夹是否存在对应的 `.h` 文件。例如,在 Linux 上可能是 `/usr/include/nvml.h` 或者 Windows 下的安装目录下。 #### 3. 初始化 NVML 和加载动态库 为了使用 NVML 功能,必须先初始化并加载相应的动态库。可以按照如下方式进行操作: ```cpp // 初始化 NVML nvmlReturn_t result; result = nvmlInit(); if (result != NVML_SUCCESS) { printf("Failed to initialize NVML: %s\n", nvmlErrorString(result)); } else { printf("Successfully initialized NVML.\n"); } ``` 对于特定平台上的动态库加载问题,还需要注意操作系统差异。例如,在 Linux 中需确保 `-lnvidia-ml` 被正确传递给链接器;而在 Windows 则应确保环境变量 PATH 包含驱动程序 DLL 所在位置[^4]。 #### 4. 使用替代方案实现风扇控制策略设置 假如目标设备的确允许通过软件调整散热模式(如自动/手动),但由于 API 局限无法直接调用 `nvmlDeviceSetFanControlPolicy` ,则可考虑其他方法完成类似需求。比如读取当前状态后再基于业务逻辑修改参数值: ```cpp nvmlEnableState_t fanControlState; result = nvmlDeviceGetFanControlPolicy(handle, &fanControlState); if (result == NVML_SUCCESS){ // 根据实际场景切换至所需的状态... }else{ fprintf(stderr,"Unable to get current policy:%s\n",nvmlErrorString(result)); } ``` 以上代码片段展示了如何获取现有风扇控制策略的信息,并据此做出进一步处理决定[^3]。 #### 注意事项 即使成功解决了上述提到的技术障碍,“nvmlDeviceSetFanControlPolicy”的具体行为仍取决于硬件本身的支持程度以及厂商设定权限等因素影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值