又见 pthread 和 uclibc 冲突

本文介绍了一种在嵌入式系统中解决pthread_cond_wait函数工作异常的方法,通过调整链接器参数-lc,确保使用正确的pthread库实现。

转载时请注明出处和作者联系方式:http://blog.youkuaiyun.com/mimepp
作者联系方式:YU TAO <yut616 at sohu dot com>

 

关键字: pthread,uclibc,libc, 冲突,嵌入式

 

几年前,在ARM系统中,遇到过 pthread_cond_wait 有关函数,在 x86 上是正常工作,但在 device 上却工作异常的情况,结果追查到了执行文件链接时 -lpthread -lc 参数有问题。

 

在 uclibc 中有 week symbol 的情况:


0000002c W pthread_cond_wait

 

 

而真正应该使用的是 pthread 里的

000044e0 T pthread_cond_wait

 

T 表示已经实现了的,在代码段中的接口。

 

另外 U 表示未定义:

 

只有 T 才是你真正应该用到的。

 

如果你在编译链接执行文件时,不小心加上了 -lc ,那么就会出现上面的问题,要特别小心。

去掉 -lc 就解决了在 device 上执行异常的问题。

 

这个问题找起来的时候,会很没有头绪,简单的办法就是自己写一个程序,并单独编译后,在 device 上看 pthread_cond_wait 是否工作正常,如果正常,那么就说明 device 上是能工作的,然后再找到底是哪里引起你的应用工作不正常,慢慢缩小问题范围。

This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by iptables configure 1.4.21, which was generated by GNU Autoconf 2.69. Invocation command line was $ ./configure --target=arm-openwrt-linux-uclibc --host=arm-openwrt-linux-uclibc --build=i686-linux-gnu --program-prefix= --program-suffix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls --enable-shared --enable-devel --with-kernel=/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/user_headers --with-xtlibdir=/usr/lib/iptables --enable-static ## --------- ## ## Platform. ## ## --------- ## hostname = ubuntu uname -m = i686 uname -r = 3.19.0-25-generic uname -s = Linux uname -v = #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015 /usr/bin/uname -p = unknown /bin/uname -X = unknown /bin/arch = i686 /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/host/bin PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/toolchain-arm-openwrt-linux-uclibc/bin PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/host/bin PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/toolchain-arm-openwrt-linux-uclibc/bin PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/host/bin PATH: /home/zhanggexu/miniconda2/envs/spider/bin PATH: /opt/cmake-install/bin PATH: /home/zhanggexu/miniconda2/bin PATH: /usr/local/sbin PATH: /usr/local/bin PATH: /usr/sbin PATH: /usr/bin PATH: /sbin PATH: /bin PATH: /usr/games PATH: /usr/local/games PATH: /home/zhanggexu/newcode/be900v2/Iplatform/build/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin PATH: /home/zhanggexu/newcode/be900v2/Iplatform/build/../../bcm504L04/bcm963xx_5.04L.04/hostTools PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/bin PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-aarch64-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/bin PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/bin PATH: /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-aarch64-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/bin ## ----------- ## ## Core tests. ## ## ----------- ## configure:2376: loading site script /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/include/site/arm-openwrt-linux-uclibc | #!/bin/sh | | . $TOPDIR/include/site/arm-linux | . $TOPDIR/include/site/linux-uclibc | configure:2523: checking for a BSD-compatible install configure:2591: result: /usr/bin/install -c configure:2604: checking whether build environment is sane configure:2659: result: yes configure:2718: checking for arm-openwrt-linux-uclibc-strip configure:2745: result: arm-buildroot-linux-gnueabi-strip configure:2810: checking for a thread-safe mkdir -p configure:2849: result: /bin/mkdir -p configure:2856: checking for gawk configure:2872: found /usr/bin/gawk configure:2883: result: gawk configure:2894: checking whether make sets $(MAKE) configure:2916: result: yes configure:2945: checking whether make supports nested variables configure:2962: result: yes configure:3097: checking for arm-openwrt-linux-uclibc-gcc configure:3124: result: arm-buildroot-linux-gnueabi-gcc configure:3393: checking for C compiler version configure:3402: arm-buildroot-linux-gnueabi-gcc --version >&5 arm-buildroot-linux-gnueabi-gcc.br_real (Buildroot 2021.02.4) 10.3.0 Copyright (C) 2020 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. configure:3413: $? = 0 configure:3402: arm-buildroot-linux-gnueabi-gcc -v >&5 Using built-in specs. COLLECT_GCC=/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/arm-buildroot-linux-gnueabi-gcc.br_real COLLECT_LTO_WRAPPER=/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/../libexec/gcc/arm-buildroot-linux-gnueabi/10.3.0/lto-wrapper Target: arm-buildroot-linux-gnueabi Configured with: ./configure --prefix=/home/tp/code2/SDK/build_toolchain_10.3/target/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1 --sysconfdir=/home/tp/code2/SDK/build_toolchain_10.3/target/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/etc --enable-static --target=arm-buildroot-linux-gnueabi --with-sysroot=/home/tp/code2/SDK/build_toolchain_10.3/target/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/arm-buildroot-linux-gnueabi/sysroot --enable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --disable-decimal-float --with-gmp=/home/tp/code2/SDK/build_toolchain_10.3/target/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1 --with-mpc=/home/tp/code2/SDK/build_toolchain_10.3/target/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1 --with-mpfr=/home/tp/code2/SDK/build_toolchain_10.3/target/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1 --with-pkgversion='Buildroot 2021.02.4' --with-bugurl=http://bugs.buildroot.net/ --without-zstd --disable-libquadmath --disable-libquadmath-support --enable-tls --enable-plugins --enable-lto --enable-threads --with-isl=/home/tp/code2/SDK/build_toolchain_10.3/target/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1 --with-abi=aapcs-linux --with-cpu=cortex-a9 --with-fpu=vfpv3 --with-float=softfp --with-mode=arm --enable-languages=c,c++ --with-build-time-tools=/home/tp/code2/SDK/build_toolchain_10.3/target/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/arm-buildroot-linux-gnueabi/bin --enable-shared --disable-libgomp Thread model: posix Supported LTO compression algorithms: zlib gcc version 10.3.0 (Buildroot 2021.02.4) COMPILER_PATH=/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/../libexec/gcc/arm-buildroot-linux-gnueabi/10.3.0/:/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/../libexec/gcc/:/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/../lib/gcc/arm-buildroot-linux-gnueabi/10.3.0/../../../../arm-buildroot-linux-gnueabi/bin/ LIBRARY_PATH=/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/../lib/gcc/arm-buildroot-linux-gnueabi/10.3.0/:/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/../lib/gcc/:/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/../lib/gcc/arm-buildroot-linux-gnueabi/10.3.0/../../../../arm-buildroot-linux-gnueabi/lib/:/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/arm-buildroot-linux-gnueabi/sysroot/lib/:/home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/arm-buildroot-linux-gnueabi/sysroot/usr/lib/ ... rest of stderr output deleted ... configure:3413: $? = 1 configure:3402: arm-buildroot-linux-gnueabi-gcc -V >&5 arm-buildroot-linux-gnueabi-gcc.br_real: error: unrecognized command-line option '-V' configure:3413: $? = 1 configure:3402: arm-buildroot-linux-gnueabi-gcc -qversion >&5 arm-buildroot-linux-gnueabi-gcc.br_real: error: unrecognized command-line option '-qversion'; did you mean '--version'? configure:3413: $? = 1 configure:3433: checking whether the C compiler works configure:3455: arm-buildroot-linux-gnueabi-gcc -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/user_headers/include -ffunction-sections -fdata-sections -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/user_headers/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/usr-be900v2/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/include -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/lib -Wl,-rpath-link,/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib/ -lnetfilter_conntrack -Wl,--gc-sections conftest.c >&5 /home/zhanggexu/newcode/be900v2/bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/bin/../lib/gcc/arm-buildroot-linux-gnueabi/10.3.0/../../../../arm-buildroot-linux-gnueabi/bin/ld: cannot find -lnetfilter_conntrack collect2: error: ld returned 1 exit status configure:3459: $? = 1 configure:3497: result: no configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "iptables" | #define PACKAGE_TARNAME "iptables" | #define PACKAGE_VERSION "1.4.21" | #define PACKAGE_STRING "iptables 1.4.21" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "iptables" | #define VERSION "1.4.21" | /* end confdefs.h. */ | | int | main () | { | | ; | return 0; | } configure:3502: error: in `/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21': configure:3504: error: C compiler cannot create executables See `config.log' for more details ## ---------------- ## ## Cache variables. ## ## ---------------- ## ac_cv_c_bigendian=no ac_cv_c_gettext_without_libintl=yes ac_cv_c_littleendian=yes ac_cv_c_long_double=no ac_cv_conv_longlong_to_float=yes ac_cv_env_CC_set=set ac_cv_env_CC_value=arm-buildroot-linux-gnueabi-gcc ac_cv_env_CFLAGS_set=set ac_cv_env_CFLAGS_value=' -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/user_headers/include -ffunction-sections -fdata-sections ' ac_cv_env_CPPFLAGS_set=set ac_cv_env_CPPFLAGS_value='-I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/user_headers/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/usr-be900v2/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/include ' ac_cv_env_CPP_set= ac_cv_env_CPP_value= ac_cv_env_LDFLAGS_set=set ac_cv_env_LDFLAGS_value='-L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/lib -Wl,-rpath-link,/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib/ -lnetfilter_conntrack -Wl,--gc-sections ' ac_cv_env_LIBS_set= ac_cv_env_LIBS_value= ac_cv_env_PKG_CONFIG_LIBDIR_set=set ac_cv_env_PKG_CONFIG_LIBDIR_value=/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib/pkgconfig ac_cv_env_PKG_CONFIG_PATH_set=set ac_cv_env_PKG_CONFIG_PATH_value=/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib/pkgconfig ac_cv_env_PKG_CONFIG_set=set ac_cv_env_PKG_CONFIG_value=/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/host/bin/pkg-config ac_cv_env_build_alias_set=set ac_cv_env_build_alias_value=i686-linux-gnu ac_cv_env_host_alias_set=set ac_cv_env_host_alias_value=arm-openwrt-linux-uclibc ac_cv_env_libnetfilter_conntrack_CFLAGS_set= ac_cv_env_libnetfilter_conntrack_CFLAGS_value= ac_cv_env_libnetfilter_conntrack_LIBS_set= ac_cv_env_libnetfilter_conntrack_LIBS_value= ac_cv_env_libnfnetlink_CFLAGS_set= ac_cv_env_libnfnetlink_CFLAGS_value= ac_cv_env_libnfnetlink_LIBS_set= ac_cv_env_libnfnetlink_LIBS_value= ac_cv_env_target_alias_set=set ac_cv_env_target_alias_value=arm-openwrt-linux-uclibc ac_cv_file__dev_zero=yes ac_cv_func___adjtimex=yes ac_cv_func___va_copy=no ac_cv_func__exit=yes ac_cv_func_bcmp=yes ac_cv_func_bcopy=yes ac_cv_func_bzero=yes ac_cv_func_cimag=yes ac_cv_func_creal=yes ac_cv_func_fchmod=yes ac_cv_func_getaddrinfo=yes ac_cv_func_getcwd=yes ac_cv_func_getdomainname=yes ac_cv_func_getpgrp_void=yes ac_cv_func_getpwuid_r=yes ac_cv_func_gettimeofday=yes ac_cv_func_index=yes ac_cv_func_lstat=yes ac_cv_func_lstat_dereferences_slashed_symlink=yes ac_cv_func_lstat_empty_string_bug=no ac_cv_func_malloc_0_nonnull=yes ac_cv_func_malloc_works=yes ac_cv_func_memcmp_clean=yes ac_cv_func_memcmp_working=yes ac_cv_func_posix_getgrgid_r=yes ac_cv_func_posix_getpwuid_r=yes ac_cv_func_psignal=yes ac_cv_func_pthread_key_delete=yes ac_cv_func_realloc_0_nonnull=yes ac_cv_func_realloc_works=yes ac_cv_func_rename=yes ac_cv_func_rindex=yes ac_cv_func_setgrent_void=yes ac_cv_func_setlocale=yes ac_cv_func_setpgrp_void=yes ac_cv_func_setresuid=no ac_cv_func_setvbuf_reversed=no ac_cv_func_stat_empty_string_bug=no ac_cv_func_stat_ignores_trailing_slash=no ac_cv_func_strerror=yes ac_cv_func_strftime=yes ac_cv_func_utimes=yes ac_cv_func_va_copy=no ac_cv_func_vsnprintf=yes ac_cv_have_accrights_in_msghdr=no ac_cv_have_broken_snprintf=no ac_cv_have_control_in_msghdr=yes ac_cv_have_decl_sys_siglist=no ac_cv_have_openpty_ctty_bug=yes ac_cv_have_space_d_name_in_struct_dirent=yes ac_cv_header_netinet_sctp_h=no ac_cv_header_netinet_sctp_uio_h=no ac_cv_int64_t=yes ac_cv_lbl_unaligned_fail=no ac_cv_linux_kernel_pppoe=yes ac_cv_linux_vers=2 ac_cv_pack_bitfields_reversed=yes ac_cv_path_LDCONFIG= ac_cv_path_install='/usr/bin/install -c' ac_cv_path_mkdir=/bin/mkdir ac_cv_prog_AWK=gawk ac_cv_prog_CC=arm-buildroot-linux-gnueabi-gcc ac_cv_prog_STRIP=arm-buildroot-linux-gnueabi-strip ac_cv_prog_make_make_set=yes ac_cv_regexec_segfault_emptystr=no ac_cv_sctp=no ac_cv_sizeof___int64=0 ac_cv_sizeof_char=1 ac_cv_sizeof_int16_t=2 ac_cv_sizeof_int32_t=4 ac_cv_sizeof_int64_t=8 ac_cv_sizeof_int=4 ac_cv_sizeof_long=4 ac_cv_sizeof_long_int=4 ac_cv_sizeof_long_long=8 ac_cv_sizeof_off_t=8 ac_cv_sizeof_short=2 ac_cv_sizeof_short_int=2 ac_cv_sizeof_size_t=4 ac_cv_sizeof_ssize_t=4 ac_cv_sizeof_u_int16_t=2 ac_cv_sizeof_u_int32_t=4 ac_cv_sizeof_u_int64_t=8 ac_cv_sizeof_uint16_t=2 ac_cv_sizeof_uint32_t=4 ac_cv_sizeof_uint64_t=8 ac_cv_sizeof_unsigned_int=4 ac_cv_sizeof_unsigned_long=4 ac_cv_sizeof_unsigned_long_long=8 ac_cv_sizeof_unsigned_short=2 ac_cv_sizeof_void_p=4 ac_cv_sys_restartable_syscalls=yes ac_cv_time_r_type=POSIX ac_cv_type_suseconds_t=yes ac_cv_uchar=no ac_cv_uint64_t=yes ac_cv_uint=yes ac_cv_ulong=yes ac_cv_ushort=yes ac_cv_va_copy=C99 ac_cv_va_val_copy=yes am_cv_make_support_nested_variables=yes as_cv_unaligned_access=yes ## ----------------- ## ## Output variables. ## ## ----------------- ## ACLOCAL='${SHELL} /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/build-aux/missing aclocal-1.15' AMDEPBACKSLASH='' AMDEP_FALSE='' AMDEP_TRUE='' AMTAR='$${TAR-tar}' AM_BACKSLASH='\' AM_DEFAULT_V='1' AM_DEFAULT_VERBOSITY='1' AM_V='1' AR='arm-buildroot-linux-gnueabi-ar' AUTOCONF='${SHELL} /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/build-aux/missing autoconf' AUTOHEADER='${SHELL} /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/build-aux/missing autoheader' AUTOMAKE='${SHELL} /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/build-aux/missing automake-1.15' AWK='gawk' CC='arm-buildroot-linux-gnueabi-gcc' CCDEPMODE='' CFLAGS=' -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/user_headers/include -ffunction-sections -fdata-sections ' CPP='' CPPFLAGS='-I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/bcm963xx_5.04L.04/kernel/linux-4.19/user_headers/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/usr-be900v2/include -I/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/include ' CYGPATH_W='echo' DEFS='' DEPDIR='' DLLTOOL='' DSYMUTIL='' DUMPBIN='' ECHO_C='' ECHO_N='-n' ECHO_T='' EGREP='' ENABLE_BPFC_FALSE='' ENABLE_BPFC_TRUE='' ENABLE_DEVEL_FALSE='' ENABLE_DEVEL_TRUE='' ENABLE_IPV4_FALSE='' ENABLE_IPV4_TRUE='' ENABLE_IPV6_FALSE='' ENABLE_IPV6_TRUE='' ENABLE_LARGEFILE_FALSE='' ENABLE_LARGEFILE_TRUE='' ENABLE_LIBIPQ_FALSE='' ENABLE_LIBIPQ_TRUE='' ENABLE_SHARED_FALSE='' ENABLE_SHARED_TRUE='' ENABLE_STATIC_FALSE='' ENABLE_STATIC_TRUE='' ENABLE_SYNCONF_FALSE='' ENABLE_SYNCONF_TRUE='' EXEEXT='' FGREP='' GREP='' HAVE_LIBNETFILTER_CONNTRACK_FALSE='' HAVE_LIBNETFILTER_CONNTRACK_TRUE='' HAVE_LIBNFNETLINK_FALSE='' HAVE_LIBNFNETLINK_TRUE='' INSTALL_DATA='${INSTALL} -m 644' INSTALL_PROGRAM='${INSTALL}' INSTALL_SCRIPT='${INSTALL}' INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' LD='arm-buildroot-linux-gnueabi-ld' LDFLAGS='-L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/lib -Wl,-rpath-link,/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/usr/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/../../bcm504L04/toolchain/opt/toolchains/crosstools-arm_softfp-gcc-10.3-linux-4.19-glibc-2.32-binutils-2.36.1/lib -L/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib/ -lnetfilter_conntrack -Wl,--gc-sections ' LIBOBJS='' LIBS='' LIBTOOL='' LIPO='' LN_S='' LTLIBOBJS='' MAKEINFO='${SHELL} /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/build-aux/missing makeinfo' MANIFEST_TOOL='' MKDIR_P='/bin/mkdir -p' NM='arm-buildroot-linux-gnueabi-nm' NMEDIT='' OBJDUMP='arm-buildroot-linux-gnueabi-objdump' OBJEXT='' OTOOL64='' OTOOL='' PACKAGE='iptables' PACKAGE_BUGREPORT='' PACKAGE_NAME='iptables' PACKAGE_STRING='iptables 1.4.21' PACKAGE_TARNAME='iptables' PACKAGE_URL='' PACKAGE_VERSION='1.4.21' PATH_SEPARATOR=':' PKG_CONFIG='/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/host/bin/pkg-config' PKG_CONFIG_LIBDIR='/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib/pkgconfig' PKG_CONFIG_PATH='/home/zhanggexu/newcode/be900v2/Iplatform/openwrt/staging_dir/target-arm-openwrt-linux-uclibc-be900v2/usr/lib/pkgconfig' RANLIB='arm-buildroot-linux-gnueabi-ranlib' SED='' SET_MAKE='' SHELL='/bin/sh' STRIP='arm-buildroot-linux-gnueabi-strip' VERSION='1.4.21' ac_ct_AR='' ac_ct_CC='' ac_ct_DUMPBIN='' am__EXEEXT_FALSE='' am__EXEEXT_TRUE='' am__fastdepCC_FALSE='' am__fastdepCC_TRUE='' am__include='' am__isrc='' am__leading_dot='.' am__nodep='' am__quote='' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' bindir='/usr/bin' blacklist_modules='' build='i686-linux-gnu' build_alias='i686-linux-gnu' build_cpu='' build_os='' build_vendor='' datadir='/usr/share' datarootdir='${prefix}/share' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' dvidir='${docdir}' exec_prefix='/usr' host='arm-openwrt-linux-uclibc' host_alias='arm-openwrt-linux-uclibc' host_cpu='' host_os='' host_vendor='' htmldir='${docdir}' includedir='${prefix}/include' infodir='/usr/info' install_sh='${SHELL} /home/zhanggexu/newcode/be900v2/Iplatform/openwrt/build_dir/linux-model_brcm_bcm490x/iptables-1.4.21/build-aux/install-sh' kbuilddir='' kinclude_CPPFLAGS='' ksourcedir='' libdir='${exec_prefix}/lib' libexecdir='/usr/lib' libiptc_LDFLAGS2='' libnetfilter_conntrack_CFLAGS='' libnetfilter_conntrack_LIBS='' libnfnetlink_CFLAGS='' libnfnetlink_LIBS='' libxtables_vage='0' libxtables_vcurrent='10' libxtables_vmajor='' localedir='${datarootdir}/locale' localstatedir='/var' mandir='/usr/man' mkdir_p='$(MKDIR_P)' noundef_LDFLAGS='' oldincludedir='/usr/include' pdfdir='${docdir}' pkgconfigdir='' pkgdatadir='' prefix='/usr' program_transform_name='s&$$&&;s&^&&' psdir='${docdir}' regular_CFLAGS='' regular_CPPFLAGS='' sbindir='/usr/sbin' sharedstatedir='${prefix}/com' sysconfdir='/etc' target_alias='arm-openwrt-linux-uclibc' xtlibdir='' ## ----------- ## ## confdefs.h. ## ## ----------- ## /* confdefs.h */ #define PACKAGE_NAME "iptables" #define PACKAGE_TARNAME "iptables" #define PACKAGE_VERSION "1.4.21" #define PACKAGE_STRING "iptables 1.4.21" #define PACKAGE_BUGREPORT "" #define PACKAGE_URL "" #define PACKAGE "iptables" #define VERSION "1.4.21" configure: exit 77
最新发布
10-24
在多线程编程中,`pthread_create` `pthread_join` 是 POSIX 线程(pthread)API 中两个非常重要的函数。它们分别用于创建线程等待线程的结束。 --- ### 1. `pthread_create` 该函数用于创建一个新的线程。其原型如下: ```c int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); ``` - `thread`:用于存储新创建线程的标识符。 - `attr`:线程属性,通常设为 `NULL` 表示使用默认属性。 - `start_routine`:线程执行的函数。 - `arg`:传递给线程函数的参数。 --- ### 2. `pthread_join` 该函数用于等待一个线程结束。其原型如下: ```c int pthread_join(pthread_t thread, void **retval); ``` - `thread`:要等待的线程标识符。 - `retval`:用来接收线程退出时的返回值(可以为 `NULL`)。 --- ### 示例代码 以下是一个使用 `pthread_create` `pthread_join` 的简单示例: ```c #include <stdio.h> #include <stdlib.h> #include <pthread.h> // 线程执行的函数 void* thread_function(void* arg) { int thread_num = *((int*)arg); printf("线程 %d 正在运行...\n", thread_num); pthread_exit((void*)"Thank you for the CPU time!"); // 线程退出 } int main() { pthread_t thread1, thread2; int num1 = 1, num2 = 2; int result; void* return_value; // 创建第一个线程 result = pthread_create(&thread1, NULL, thread_function, (void*)&num1); if (result) { fprintf(stderr, "线程1创建失败!错误代码:%d\n", result); exit(-1); } // 创建第二个线程 result = pthread_create(&thread2, NULL, thread_function, (void*)&num2); if (result) { fprintf(stderr, "线程2创建失败!错误代码:%d\n", result); exit(-1); } // 等待线程1结束 pthread_join(thread1, &return_value); printf("线程1返回值: %s\n", (char*)return_value); // 等待线程2结束 pthread_join(thread2, &return_value); printf("线程2返回值: %s\n", (char*)return_value); printf("主线程结束。\n"); return 0; } ``` --- ### 代码解释 - `pthread_create` 创建了两个线程,它们分别执行 `thread_function` 函数。 - `thread_function` 打印出线程编号并返回一个字符串。 - `pthread_join` 会阻塞主线程,直到指定的线程结束。 - 线程返回的值通过 `pthread_exit` 设置,并通过 `pthread_join` 获取。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值