Linux 常见错误集锦
环境信息
- Centos 7
automake
编译安装软件报错
error: require Automake 1.14, but have 1.13.4 |
Automake 版本不匹配,需要安装 Automake 1.14
rpm -qa | grep automake |
以下步骤安装 automake-1.14.1
wget http://ftp.gnu.org/gnu/automake/automake-1.14.1.tar.gz |
以上步骤执行完成后,会生成 configure
可执行文件
./configure |
安装完成后,执行以下命令验证版本
automake --version |
makeinfo
编译安装软件报错
makeinfo: command not found |
makeinfo
命令不存在,执行以下命令安装
yum install texinfo |
gcc
no acceptable C compiler found in $PATH
缺少 gcc
编译器,安装即可
yum install -y gcc |
A compiler with support for C++11 language features is required
编译安装软件时报错
configure: error: *** A compiler with support for C++11 language features is required. |
错误原因为 gcc 版本太低。查看当前 gcc 版本
gcc -v |
安装 gcc-8.3.0
以下步骤演示安装 gcc-8.3.0 [1]
- 下载安装包,官方下载地址
wget ftp://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/releases/gcc-8.3.0/gcc-8.3.0.tar.gz
tar -xf gcc-8.3.0.tar.gz
cd gcc-8.3.0 - 编译安装。编译依赖
GMP 4.2+
,MPFR 2.4.0+
andMPC 0.8.0+
,需要先按照顺序安装这 3 个依赖。依赖安装参考: 安装 GMP,安装 MPFR,安装 MPC./configure --prefix=/usr/local/gcc-8.3.0 --disable-multilib
make
make install - 安装完成后,需要更新系统标准库 查看当前系统使用的 gcc 库文件,可以看到版本为
libstdc++.so.6.0.19
执行以下操作,更新ls /usr/lib64/libstdc++.so.6
libstdc++.so.6 libstdc++.so.6.0.19
ls /usr/lib64/libstdc++.so.6 -l
lrwxrwxrwx 1 root root 19 May 30 08:05 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19libstdc++.so.6
到最新安装的版本rm -rf /usr/lib64/libstdc++.so.6
ln -s /usr/local/gcc-8.3.0/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6
ls /usr/lib64/libstdc++.so.6 -l
lrwxrwxrwx 1 root root 46 Jun 9 09:31 /usr/lib64/libstdc++.so.6 -> /usr/local/gcc-8.3.0/lib64/libstdc++.so.6.0.25
安装 GMP
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 |
安装 MPFR
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 |
安装 MPC
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz |
cannot find crtn.o
Centos7 编译软件时报错
./configure --prefix=/usr/local/gcc-8.3.0 |
解决方法 : 编译时添加选项 --disable-multilib
[2]
./configure --prefix=/usr/local/gcc-8.3.0 --disable-multilib |
C++ preprocessor “/lib/cpp” fails sanity check
centos7 编译后,安装软件时报错
error: C++ preprocessor "/lib/cpp" fails sanity chec |
该报错原因为缺少必要的 C++ 库,执行以下命令安装
yum install -y gcc-c++ |
编译安装软件前,执行 configure 时指定 C++ 编译器的路径
在系统上安装了多个版本的 gcc 时,编译前执行 ./configure
时可能会找到默认的 gcc,会不符合版本要求,可能会输出下面代码示例中的错误。./configure
时找到的是 4.8.5
的 GCC,配置此软件需要 4.9
,系统上还安装了 8.3.0
版本的 gcc。
./configure --prefix=/usr/local/ |
为了解决此问题,可以在执行 ./configure
时指定编译器的位置,分别可以使用环境变量 CC=/path/to/gcc
和 CXX=/usr/local/gcc-8.3.0/bin/g++
指定 C 和 C++ 编译器的具体路径。
./configure CXX=/usr/local/gcc-8.3.0/bin/g++ --prefix=/usr/local/ |
g++: command not found
执行 make
命令报错: g++: command not found
。原因是系统中没有安装 g++
编译器。g++
是 GNU 编译器集合 (GCC) 中的 C++ 编译器,以下是安装它的步骤
在 Ubuntu/Debian 系统上安装 g++
- 更新软件包列表
sudo apt update
- 安装
g++
:sudo apt install g++
在 CentOS/RHEL 系统上安装 g++
更新软件包列表
sudo yum update
安装
g++
(在 CentOS/RHEL 中,g++
是gcc-c++
软件包的一部分):sudo yum install gcc-c++
在 Fedora 系统上安装 g++
- 更新软件包列表
sudo dnf update
- 安装
g++
:sudo dnf install gcc-c++
openssl
openssl 版本升级
Centos7 系统默认安装的 openssl 版本太低,需要升级时,可以参考以下步骤升级
查看默认版本
openssl version |
最新版本 OpenSSL 下载地址,此处下载 openssl-1.1.1.tar.gz
wget -k http://www.openssl.org/source/openssl-1.1.1.tar.gz --no-check-certificate |
此时执行以下命令查看版本会报错
/usr/local/openssl/bin/openssl version |
主要是因为找不到最新版本的动态链接库,可以执行以下命令链接 libssl
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/ |
重新检查新编译的 openssl 的版本,显示最新安装的版本
/usr/local/openssl/bin/openssl version |
如果旧版本不再使用,执行以下命令使用新的 openssl 版本
openssl version |
Centos 8 报错找不到 libssl.so.10
CentOS 8 使用较新的 OpenSSL 版本,通常为 libssl.so.1.1
,但是,某些软件(如 PHP )可能依赖于旧版本的 libssl.so.10
(openssl 1.0 版本
)。在这种情况下,CentOS 8 提供了 OpenSSL 1.0
兼容库,你可以通过以下命令来安装。该命令会安装 libssl.so.10
和 libcrypto.so.10
,这是 PHP 7.3 版本运行时所需要的旧版 OpenSSL 共享库。
sudo dnf install compat-openssl10 |
make
Something went wrong bootstrapping makefile fragments
源码编译安装软件包,执行 ./configure
报错
config.status: error: Something went wrong bootstrapping makefile fragments |
问题原因 为缺少 GNU make
,执行以下命令安装
yum install -y make |
文件编码相关问题
检查文件编码的可用方法
使用
file
命令,检测结果可能不准确,参考示例file 2024-8-01.zip
2024-8-01.zip: Zip archive data, at least v2.0 to extract, compression method=deflate
file -bi 2024-8-01/1.csv
text/csv; charset=iso-8859-1使用
enca
命令,需要先安装(sudo apt install enca
)enca -L zh_CN 1.csv
Simplified Chinese National Standard; GB2312enca
命令测试文件编码相对更准确些,比如同一个包含中文的文件,使用file -bi
测试可能显示编码为iso-8859-1
,使用enca -L zh_CN 1.csv
则显示编码为GB2312
检查 shell 终端使用的编码
echo $LANG
en_US.UTF-8
中文显示乱码
环境信息
- Ubuntu 22.04 Jammy Jellyfish
本示例中的文件内容中包含中文,在终端中打开,其中中文显示乱码,英文字符显示正常
检查文件编码,显示为 charset=iso-8859-1
file -bi 2024-8-01/1.csv |
检查终端编码
echo $LANG |
本示例使用的 Shell 终端工具为 Tilix,检查其编码配置为 UTF-8(Preferences->Encoding: UTF-8 Unicode
),使用 iconv
命令对文件进行编码转换,将 ISO-8859-1
转换为 UTF-8
iconv -f ISO-8859-1 -t UTF-8 2024-8-01/1.csv |
其输出内容依旧乱码。
怀疑 file
命令检测文本编码格式错误。文件实际上是用其他编码格式(例如 GBK 或 GB2312)写入的,但错误地被检测为 ISO-8859-1。 使用其他中文常见的编码类型如 GBK 或 GB2312 进行转换,测试发现将其从 GBK 或者 GB2312 转换为 UTF-8 后,内容都可以显示正常(不再乱码)
iconv -f GBK -t UTF-8 2024-8-01/1.csv |
其他错误
gtkdocize: command not found
这个错误表明系统中缺少 gtk-doc
工具。gtkdocize
是 gtk-doc
的一部分,gtk-doc
是用于生成 API 文档的工具,通常在配置和编译一些与 GNOME 相关的软件包时会使用到。
sudo yum install gtk-doc |
autoreconf: failed to run libtoolize: No such file or directory
表明系统缺少 libtool
,这是 GNU 构建系统中用来生成自动配置脚本的工具之一。
sudo yum install libtool |
vips 编译安装及 webp 支持
环境信息:
- Centos 7 3.10.0-1160.119.1.el7.x86_64
- vips-8.12.0
- libwebp-1.2.0
vips-8.12.0
要支持 webp
时,需要 webp
版本高于 0.6
。Centos 7 默认安装的 webp
版本不满足。
编译安装 vips-8.12.0
和 libwebp-1.2.0
可以参考链接 Centos-7.8-Mini安装libvips依赖jpeg tiff png webp heif扩展