C_icap 与 pthread 链接时出错

标签 c ubuntu linker pthreads glibc

我试图在 Ubuntu 11 上安装 c_icap 并收到以下错误。

make[2]: Entering directory `/home/madmin/milkyway/sol/server/3rdparty/c_icap-0.1.7/tests'
/bin/bash ../libtool --tag=CC   --mode=link gcc -I../include/ -D_REENTRANT -g -O2 -Wall -rdynamic -rpath /usr/local/c_icap/lib   -o test_cache test_cache.o  **-lpthread** ../libicapapi.la  -ldl
libtool: link: gcc -I../include/ -D_REENTRANT -g -O2 -Wall -rdynamic -o .libs/test_cache test_cache.o  **-lpthread** ../.libs/libicapapi.so -ldl -Wl,-rpath -Wl,/usr/local/c_icap/lib
../.libs/libicapapi.so: undefined reference to `pthread_rwlock_rdlock'
../.libs/libicapapi.so: undefined reference to `pthread_rwlock_wrlock'
../.libs/libicapapi.so: undefined reference to `pthread_rwlock_unlock'
collect2: ld returned 1 exit status

不知道问题是什么,因为我看到了 libicap.so 的 objdump 并得到了这个

0000000000000000         *UND*  0000000000000000              pthread_rwlock_rdlock
0000000000000000       F *UND*  0000000000000000    pthread_mutex_destroy@@GLIBC_2.2.5
0000000000000000         *UND*  0000000000000000              pthread_rwlock_wrlock
0000000000000000       F *UND*  0000000000000000   pthread_mutex_unlock@@GLIBC_2.2.5
0000000000000000         *UND*  0000000000000000              pthread_rwlock_unlock

这表明 pthread lib 没有丢失,因为 pthread_mutex 符号在 objdump 中已正确解析。另外 -lpthread 标志也存在。

在我的Makefile中

THREADS_LDADD = -lpthread
c_icap_LDADD = -lpthread libicapapi.la  -ldl

有什么想法吗?

最佳答案

使用 -pthread 进行编译。

这将包括所需的一切。

关于C_icap 与 pthread 链接时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475230/

相关文章:

c++ - 快速找到2^x的方法

c++ - 在 Ubuntu C++ 上找不到 gtk/gtk.h

ubuntu - Ansible 动态库存脚本 - 奇怪的行为

objective-c - Xcode 中的链接错误

linker - FFMPEG 链接错误

c - 如何在 C 的二维字符数组中找到字符指针?

c - 我正在尝试使用 c 将一个文本文件复制到另一个文件

c - 当我删除 c = getchar() 部分时,为什么默认语句在 case 之后起作用?

ubuntu - 使用模块编译 nginx 配置失败

c++ - 使用与其他共享库链接的共享库