gpt4 book ai didi

c - 在 SunOS 上编译时 strerror_r 导致错误(C 编程)

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:48 26 4
gpt4 key购买 nike

我有一个 C 程序,它在 Linux 下编译和运行良好,没有任何警告,但是当试图在 SunOS 上编译它时,我收到以下警告:

test.c: In function `my_function':
test.c:412: warning: implicit declaration of function `strerror_r'
Undefined first referenced
symbol in file
strerror_r /var/tmp/ccRiPoGl.o
ld: fatal: Symbol referencing errors. No output written to test
collect2: ld returned 1 exit status
make: *** [test] Error 1

有什么想法吗?

最佳答案

“隐式声明”警告告诉您没有#included header 定义该函数,而“ undefined symbol ”警告告诉您函数本身' t 在您链接的任何库中定义。

综合起来,这意味着您正在编译的 C 库不提供 strerror_r 函数。您必须推出自己的替代方案。

例如,如果您正在使用 pthreads,您可以这样做:

int my_strerror_r(int errnum, char *buf, size_t buflen)
{
static pthread_mutex_t strerror_lock = PTHREAD_MUTEX_INITIALIZER;

if (!buflen)
{
errno = ENOSPC;
return -1;
}

buf[0] = 0;

pthread_mutex_lock(&strerror_lock);
strncat(buf, strerror(errnum), buflen - 1);
pthread_mutex_unlock(&strerror_lock);

return 0;
}

关于c - 在 SunOS 上编译时 strerror_r 导致错误(C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1895344/

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