解决ttyd编译时提示libwebsockets was not build with libuv support
作者:互联网
0.环境介绍
以下操作过程均在 Raspbian(Ubuntu) 上进行,系统版本如下
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
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报错,错误信息为
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
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语句附近,找到一行
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
中赫然写着
//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的一个用户,教程这种东西并不是百试百灵,每个人的环境都有差异,一种教程不一定能通吃,如果别人买了你的解决方案,发现没有解决,你不会觉得羞愧吗。
标签:ttyd,cmake,LWS,support,build,libwebsockets,LIBUV 来源: https://www.cnblogs.com/melodicule/p/16071591.html