解决ttyd编译时提示libwebsockets was not build with libuv support

0.环境介绍

以下操作过程均在 Raspbian(Ubuntu) 上进行,系统版本如下

Copy
pi@raspberrypi:~ $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster

1.尝试安装ttyd

Copy
sudo apt-get install build-essential cmake git libjson-c-dev libwebsockets-dev git clone https://github.com/tsl0922/ttyd.git cd ttyd && mkdir build && cd build cmake .. make && sudo make install

在步骤cmake ..中,CMake报错,错误信息为

Copy
pi@raspberrypi:~/src/ttyd/build $ cmake .. CMake Error at CMakeLists.txt:66 (message): libwebsockets was not build with libuv support (-DLWS_WITH_LIBUV=ON) -- Configuring incomplete, errors occurred! See also "/home/pi/src/ttyd/build/CMakeFiles/CMakeOutput.log". See also "/home/pi/src/ttyd/build/CMakeFiles/CMakeError.log".

根据提示,可以知道报错原因为系统安装的libwebsockets版本没有包含libuv,于是参考了其他人的做法,添加-DLWS_WITH_LIBUV重新编译libwebsockets

Copy
sudo apt-get remove libwebsockets-dev git clone https://github.com/warmcat/libwebsockets.git cd libwebsockets mkdir build && cd build cmake .. -DLWS_WITH_LIBUV=ON make && sudo make install

然后再回到ttyd/build,执行cmake,依然报同样的错误。

2.排查问题

定位到出错的那一行cmake语句附近,找到一行

Copy
check_symbol_exists(LWS_WITH_LIBUV "lws_config.h" LWS_WITH_LIBUV)

这是检查 lws_config.h 头文件中是否含有符号LWS_WITH_LIBUV,那么lws_config.h在哪呢,在/usr/local/include目录中,手动查看后能确认LWS_WITH_LIBUV是存在的,那么就得怀疑是cmake的问题。
首次生成时cmake会生成一个CMakeCache.txt,以节约后续编译时分析环境所花费的时间,问题就出在这。我已经更新了lws_config.h的内容,但cmake仍然缓存着上次运行的结果,CMakeCache.txt中赫然写着

Copy
//Have symbol LWS_WITH_LIBUV LWS_WITH_LIBUV:INTERNAL=

这里值是空的,代表OFF。check_symbol_exists每次只查询这里的内容,所以返回的结果是错误的。

3.解决问题

我删除了整个build文件夹,完全重新编译,问题解决

4.一些怨念

虽然文章写得轻描淡写,当时可是非常折磨人,为了解决问题不得不先把check_symbol_exists替换成set赋值语句,暂且通过编译,但运行时报找不到/usr/lib/libwebsockets.so.19,又得手动复制过去。总算跑起来了。这里diss一下csdn的一个用户,教程这种东西并不是百试百灵,每个人的环境都有差异,一种教程不一定能通吃,如果别人买了你的解决方案,发现没有解决,你不会觉得羞愧吗。

posted @   Melodic  阅读(629)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示