gpt4 book ai didi

c - 由于 asprintf 函数无法编译程序

转载 作者:行者123 更新时间:2023-12-04 10:11:42 26 4
gpt4 key购买 nike

发现此代码,它需要停止将戴尔笔记本电脑中的 CPU 节流到 20%,这是由于计算机无法识别电源适配器而发生的。

尝试在 Kubuntu 上编译并得到:

warning: implicit declaration of function ‘asprintf’; did you mean ‘vasprintf’? [-Wimplicit-function-declaration]
47 | if (asprintf(&concat_cmd, "%s %i", cmd, *reg_value) == -1)
| ^~~~~~~~
| vasprintf

我不明白为什么会这样。我读到 asprintflibiberty-dev 的一部分。库已安装,但一切都不起作用。我还添加了

#include <libiberty/libiberty.h>

得到相同的结果——函数‘asprintf’的隐式声明

告诉我如何处理它?<​​/p>

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <libiberty/libiberty.h>

#define BUFSIZE (64)

int get_msr_value(uint64_t *reg_value) {
const char *cmd = "rdmsr -u 0x1FC";
char cmd_buf[BUFSIZE];

FILE *fp;

if ((fp = popen(cmd, "r")) == NULL) {
printf("Error opening pipe!\n");
return -1;
}

cmd_buf[strcspn(fgets(cmd_buf, BUFSIZE, fp), "\n")] = 0;
*reg_value = atoi(cmd_buf);

if (pclose(fp)) {
printf("Command not found or exited with error status\n");
return -1;
}

return 0;
}

int main(void) {
const char *cmd = "wrmsr -a 0x1FC";
char *concat_cmd;
int ret;
uint64_t *reg_value = &(uint64_t){ 0 };

if ((ret = get_msr_value(reg_value))) {
return ret;
}

printf("Old register value: %lu\n", *reg_value);

*reg_value = *reg_value & 0xFFFFFFFE; // clear bit 0

printf("New register value: %lu\n", *reg_value);

if (asprintf(&concat_cmd, "%s %i", cmd, *reg_value) == -1)
return -1;

printf("Executing: %s\n", concat_cmd);

system(concat_cmd);
free(concat_cmd);

return 0;
}

最佳答案

asprintf 是 stdio.h 的一部分,但您需要在文件顶部添加 #define _GNU_SOURCE 并在编译时使用 -std=gnu99

关于c - 由于 asprintf 函数无法编译程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61306157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com