编译 apib 对符号‘pthread_create@@GLIBC_2.2.5’未定义引用

编译 apib 对符号‘pthread_create@@GLIBC_2.2.5’未定义引用

我想编译亚太投资促进会在我的 ubuntu 13.04 机器上,但我遇到了 pthread lib 问题。这是我得到的错误:

$ colormake -j 5
cd src && make all
make[1]: Entering directory `/home/monkey/bin/apib-1_0/src'
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_cpu.o apib_cpu.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_iothread.o apib_iothread.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_lines.o apib_lines.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_main.o apib_main.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_oauth.o apib_oauth.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_reporting.o apib_reporting.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_priorityq.o apib_priorityq.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_url.o apib_url.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -g -O2 -I. -I/usr/include/apr-1.0 -DHAVE_CONFIG_H -D_GNU_SOURCE   -c -o apib_mon.o apib_mon.c
gcc -std=gnu99 -pedantic -Wall -Wno-deprecated-declarations -o ../apibmon  apib_mon.o apib_lines.o apib_cpu.o -lapr-1
/usr/bin/ld: apib_mon.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
/usr/bin/ld: note: 'pthread_create@@GLIBC_2.2.5' is defined in DSO /lib/x86_64-linux-gnu/libpthread.so.0 so try adding it to the linker command line
/lib/x86_64-linux-gnu/libpthread.so.0: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make[1]: *** [../apibmon] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory `/home/monkey/bin/apib-1_0/src'
make: *** [all] Error 2

虽然所有需要的库都已安装:

$ dpkg -l  | grep apr && dpkg -l | grep libssl
ii  libapr1                                   1.4.6-3ubuntu1                             amd64        Apache Portable Runtime Library
ii  libapr1-dev                               1.4.6-3ubuntu1                             amd64        Apache Portable Runtime Library - Development Headers
ii  libaprutil1                               1.4.1-3                                    amd64        Apache Portable Runtime Utility Library
ii  libaprutil1-dbd-sqlite3                   1.4.1-3                                    amd64        Apache Portable Runtime Utility Library - SQLite3 Driver
ii  libaprutil1-dev                           1.4.1-3                                    amd64        Apache Portable Runtime Utility Library - Development Headers
ii  libaprutil1-ldap                          1.4.1-3                                    amd64        Apache Portable Runtime Utility Library - LDAP Driver
ii  libssl-dev                                1.0.1c-4ubuntu8.1                          amd64        SSL development libraries, header files and documentation
ii  libssl-doc                                1.0.1c-4ubuntu8.1                          all          SSL development documentation documentation
ii  libssl1.0.0:amd64                         1.0.1c-4ubuntu8.1                          amd64        SSL shared libraries
ii  libssl1.0.0:i386                          1.0.1c-4ubuntu8.1                          i386         SSL shared libraries

在 Makefile 中:

APR_LIBS = -L/lib/x86_64-linux-gnu/ -lm -lcrypto -lpthread -lssl -lapr-1 -laprutil-1

答案1

好的,我找到了 - Makefile 中有一个错误

APR_ONLY_LIBS没有链接 libthread:

APR_ONLY_LIBS = -lapr-1

因此我将其改为:

APR_ONLY_LIBS = -lapr-1 -lpthread

答案2

如果您是因为 ant 构建问题而来到此处,只需包含 pthread。

<property name="client.lib.path" value="/usr/local/lib"/> #this filepath
<property name="client.lib.list" value="fltk,pthread,stdc++"/> #this line
<libset dir="${client.lib.path}" libs="${client.lib.list}"/> #variable here with file path mentioned above

相关内容