gpt4 book ai didi

c - 来自同一库的两个函数: why does one generate undefined reference while the other doesn't?

转载 作者:行者123 更新时间:2023-11-30 17:53:11 25 4
gpt4 key购买 nike

我想在函数中用 pthread_mutex_trylock 替换 pthread_mutex_lock,当我这样做时,我收到“ undefined reference ”错误消息(见下文)。如果我用 pthread_mutex_lock(&cmd_queue_lock) 替换第 411-13 行,则不会收到链接器错误。

它们都来 self 已经包含的同一个库。为什么一个会产生链接器错误而另一个不会?更重要的是,我该如何解决它?我尝试添加“extern int pthread_mutex_trylock”并更改 Makefile 中 .o 文件的顺序,但两者都不起作用。

$ nl clientmain.c

12 #include <stdio.h>
...
21 #include <pthread.h>

411 if (pthread_mutex_trylock(&cmd_queue_lock) == EBUSY) {
412 continue;
413 }

$ make
clientmain.o: In function `createHC':
clientmain.c:411: undefined reference to `pthread_mutex_trylock'
collect2: ld returned 1 exit status
make: *** [clientmain] Error 1

最佳答案

诚然,我找不到任何对手册页的引用来说明这一点,但添加 -lpthread到最后的链接阶段可能会完成这项工作。我通过寻找符号 pthread_mutex_trylock 找到了它总共/usr/lib/lib*.a文件和 /usr/lib/libpthread.a是唯一定义该符号的符号。逆向工程。

gcc的手册页确实说您可以/应该使用 -pthread选项 gcc包括 POSIX 线程支持,所以这可能是皇家路线。这个选项也适用于我的系统。有趣的是常规/usr/lib/libc.a确实提供 pthread_mutex_lock但不是pthread_mutex_trylock所以这引起了你的困惑。请注意 gcc 的手册页还说这个选项对预处理有影响,所以它可能比仅仅链接到 /usr/lib/libpthread.a 更多更好。 .

关于c - 来自同一库的两个函数: why does one generate undefined reference while the other doesn't?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15775944/

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