前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【openwrt】【编译问题】openwrt编译问题

【openwrt】【编译问题】openwrt编译问题

作者头像
知否知否应是绿肥红瘦
发布2025-02-19 21:37:10
发布2025-02-19 21:37:10
6400
代码可运行
举报
文章被收录于专栏:Openwrt知识
运行总次数:0
代码可运行

undefined reference to `pthread_once’

在某次openwrt编译过程中出现了undefined reference to pthread_once错误,具体报错信息如下:

代码语言:javascript
代码运行次数:0
复制
openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-eng_all.o): In function `ENGINE_load_builtin_engines':
eng_all.c:(.text+0x30): undefined reference to `pthread_once'
openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-err.o): In function `ERR_load_ERR_strings':
err.c:(.text+0xb4e): undefined reference to `pthread_once'
openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-err_all.o): In function `ERR_load_crypto_strings':
err_all.c:(.text+0xaf): undefined reference to `pthread_once'
openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-c_all.o): In function `OpenSSL_add_all_ciphers':
c_all.c:(.text+0x9df): undefined reference to `pthread_once'
openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-c_all.o): In function `OpenSSL_add_all_digests':
c_all.c:(.text+0x9ff): undefined reference to `pthread_once'
openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-crypto_init.o):crypto_init.c:(.text+0x51): more undefined references to `pthread_once' follow
collect2: error: ld returned 1 exit status
scripts/Makefile.host:107: recipe for target 'scripts/extract-cert' failed
make[6]: *** [scripts/extract-cert] Error 1

尝试执行make clean或者make distclean重新编译均没有效果。 然后分析log发现是编译这个文件——kernel/scripts/extract-cert.c时报错,原因是找不到pthread_once函数定义(此函数定义在pthread库中)。

于是百度+Google了一圈发现有两种解法:

方法一

安装pthread并将它链接到程序。具体安装的命令是:

代码语言:javascript
代码运行次数:0
复制
 sudo apt-get install manpages-posix manpages-posix-dev

安装后pthread动态库所在的路径为/usr/lib/x86_64-linux-gnu

方法二

修改kernel/scripts/Makefile

代码语言:javascript
代码运行次数:0
复制
HOSTLDLIBS_extract-cert = $(CRYPTO_LIBS)  改为
HOSTLDLIBS_extract-cert = -lcrypto -pthread

但是我遇到的并非上述两种情况,因为我发现——根据我当前的配置文件,我就不应该编译kernel/scripts/extract-cert.c这个文件,也就是我当前kernel/.config并不是我预期的,所以这个问题的原因就是kernel的配置文件出现了错乱,所以解决办法也很简单:

手动去kernel目录下删除.config等所有配置文件,然后重新编译即可。

代码语言:javascript
代码运行次数:0
复制
cd kernel/
rm -rf .config*

实际上,openwrt很多编译错误都是编译配置信息错乱导致的,实际编译的根本不是你预期的target,遇到这种错误应该先明确配置文件是否正常,然后再去找解决办法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • undefined reference to `pthread_once’
    • 方法一
    • 方法二
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档