gpt4 book ai didi

c++ - 未定义对 `pthread_mutex_trylock' 的引用

转载 作者:IT老高 更新时间:2023-10-28 21:38:58 26 4
gpt4 key购买 nike

我有以下测试程序。

#include <iostream>
#include <cstdlib>

using namespace std;
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;

int main(int argc, char *argv[])
{
int iret;
iret = pthread_mutex_trylock( & mymutex );
cout << "Test2 !!! " << endl;
pthread_mutex_unlock( & mymutex );
return EXIT_SUCCESS;
}

如果我在不添加 pthread 库的情况下编译它,我会收到 pthread_mutex_trylock 未解决错误的错误,但仅适用于函数 pthread_mutex_trylock。

如果我将 pthread_mutex_trylock 替换为 pthread_mutex_trylock,则程序在没有 -lpthread* 选项的情况下也能很好地编译和运行。

如果我将 -lpthraed 选项添加到编译命令中,所有运行良好这运行良好:$ g++ test2.c -o test2 -lpthread此警告未解决:$ g++ test2.c -o test2

错误输出示例: $ g++ test2.c -o test2 /tmp/ccU1bBdU.o:在函数 main' 中:
test2.c:(.text+0x11): undefined reference
pthread_mutex_trylock' collect2: ld 返回 1 个退出状态

如果我替换指令 iret = pthread_mutex_trylock( & mymutex );

使用 iret = pthread_mutex_lock( & mymutex ); 如果没有将 pthread 库添加到编译命令中,程序也会编译并运行而不会出错我知道如果我不使用 -lpthread 选项,出现 Unresolved 错误是正确的,但为什么其他 pthread_ 函数也没有相同的未解决错误?

我在 fedora 12 上使用 gcc 4.4.2

$ g++ --version
g++ (GCC) 4.4.2 20091222 (Red Hat 4.4.2-20)
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

是否有人对仅针对 pthread_mutex_trylock 的取消引用的含义有一些建议?

感谢恩佐的帮助

最佳答案

如果你使用 pthread 函数,你应该用 -lpthread 链接你的目标文件,而不用担心符号是否包含在 libc 中。

这背后的基本原理是said就是这样:前段时间,当使用线程的应用程序在没有线程支持的系统上运行时,会使用 libc 中的 stub 。在这样的系统上,pthread_* 函数链接到 libc stub ,该 stub 返回错误,表明没有线程功能。在“线程”系统上,它们被链接到 pthread 库并正常工作。

很明显,pthread_mutex_trylock函数是在策略改为与-lpthread链接后出现的。所以没有 stub 。

关于c++ - 未定义对 `pthread_mutex_trylock' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009625/

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