编译使用ncurses的文件报错找不到-ltinfo该如何处理
编译ncurses项目报错Cannot find -ltinfo解决方案
- 首先确认对应架构依赖安装完整
- Debian/Ubuntu 系列发行版执行:
sudo apt install libtinfo-dev libncurses-dev,如果是32位、ARM等非默认x86_64架构,需额外安装对应架构的依赖包,比如ARMhf架构加后缀:armhf,完整命令为sudo apt install libtinfo-dev:armhf libncurses-dev:armhf - RHEL/CentOS/Fedora 系列发行版执行:
sudo dnf install ncurses-devel
- Debian/Ubuntu 系列发行版执行:
- 检查libtinfo库文件是否存在
执行命令搜索库文件:find /usr/lib* -name "libtinfo*",正常输出应包含libtinfo.so、带版本号的libtinfo.so.x两类文件- 如果仅存在带版本号的so文件,缺少无版本后缀的
.so链接文件,手动创建软链接即可,示例:
假设搜索到的文件为/usr/lib/arm-linux-gnueabihf/libtinfo.so.6,执行命令:sudo ln -s /usr/lib/arm-linux-gnueabihf/libtinfo.so.6 /usr/lib/arm-linux-gnueabihf/libtinfo.so
- 如果仅存在带版本号的so文件,缺少无版本后缀的
- 调整编译链接参数
以上步骤完成后仍报错的话,修改编译命令:- 可以将
-ltinfo替换为-lncurses,或者同时保留两个链接参数,示例:gcc 你的源码文件.c -o 输出文件名 -lncurses -ltinfo - 也可以在执行configure、make前先导入架构对应的库路径变量,示例(Debian/Ubuntu系):
export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
- 可以将
- 特殊架构适配
如果是32位ARM等交叉编译场景,必须确认所有依赖库都是对应目标架构编译的,不能混用主机x86架构的库文件,编译前可指定对应架构的pkgconfig路径,示例:export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig
内容的提问来源于stack exchange,提问作者czesiek
相关产品推荐
相关产品推荐

