Redis 6.0.8編譯錯誤解決
- 問題
- 安裝gcc
- 手動安裝GCC編譯器
- 使用新的gcc編譯redis
問題
當你下載redis 最新版本6.0.8 的時候會發現make的時候會報錯,簡單來說就是最新版的redis用到了c11 ,你的系統gcc版本低了,系統自帶gcc版本是4.8.5,只需要更新下gcc到5.4以上即可,同時編譯redis時帶上gcc版本的使用引數,不影響系統自帶gcc!我這里安裝最新版gcc10.2.0
cd src && make all
make[1]: 進入目錄“/opt/src/redis-6.0.8/src”
^[[34mCC^[[0m ^[[33mMakefile.dep^[[0m
make[1]: 離開目錄“/opt/src/redis-6.0.8/src”
make[1]: 進入目錄“/opt/src/redis-6.0.8/src”
^[[34mCC^[[0m ^[[33mserver.o^[[0m
In file included from server.c:30:0:
server.h:1065:5: error:expected specifier-qualifier-list before ‘_Atomic’
_Atomic unsigned int lruclock; /* Clock for LRU eviction */
^
server.c: in function ‘serverLogRaw’中:
server.c:1032:31: error:‘struct redisServer’ has no member named ‘logfile’
int log_to_stdout = server.logfile[0] == '\0';
^
server.c:1035:23: error:‘struct redisServer’ has no member named ‘verbosity’
if (level < server.verbosity) return;
^
server.c:1037:47: error:‘struct redisServer’ has no member named ‘logfile’
fp = log_to_stdout ? stdout : fopen(server.logfile,"a");
^
server.c:1050:47: error:‘struct redisServer’ has no member named ‘timezone’
nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
^
server.c:1050:63: error:‘struct redisServer’ has no member named ‘daylight_active’
nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
^
server.c:1053:19: error:‘struct redisServer’ has no member named ‘sentinel_mode’
if (server.sentinel_mode) {
......(后面有一長竄)
系統自帶版本
[root@alert redis-6.0.8]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
Copyright ? 2015 Free Software Foundation, Inc.
安裝gcc
gcc 下載地址:gcc下載地址 http://mirror.hust.edu.cn/gnu/gcc/
新gcc編譯安裝也是需要依靠舊版本的gcc 想編譯 C++11 標準下的 C++ 程式,則至少要安裝 4.8 版本的 GCC 編譯器,低版本的 GCC 編譯器是不支持 C++11 標準的,
yum install -y glibc-static libstdc++-static
yum install -y gcc gcc-c++
手動安裝GCC編譯器
注意,此方式需要耗費的時間較長(幾個小時),但支持安裝指定版本的 GCC 編譯器,并適用于大多數 Linux 發行版(不同之處會有額外提示);同時,如果想對已安裝的 GCC 編譯器進行升級,也可以使用此方式,
1.解壓
tar -xf gcc-10.2.0.tar.gz -C /opt/src/
cd gcc-10.2.0
2.下載安裝 GCC 所需要的依賴包(如 gmp、mpfr、mpc 等):
[root@alert gcc-10.2.0]# ./contrib/download_prerequisites
2020-09-11 16:37:01 URL:http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840/2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2020-09-11 16:37:16 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284/1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2020-09-11 16:37:28 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "./mpc-1.0.3.tar.gz" [1]
2020-09-11 16:37:46 URL:http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291/1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: 確定
mpfr-3.1.4.tar.bz2: 確定
mpc-1.0.3.tar.gz: 確定
isl-0.18.tar.bz2: 確定
All prerequisites downloaded successfully.
3.手動創建一個目錄,用于存放編譯 GCC 原始碼包生成的檔案
mkdir gcc-build-10.2.0
cd gcc-build-10.2.0
pwd
/opt/src/gcc-10.2.0/gcc-build-10.2.0
#使用gcc目錄下的命令編譯安裝
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --prefix=/opt/app/gcc-10.2.0
–enable-languages 用于設定 GCC 編譯器支持編譯的編程語言的類別,例如 c、c++、java、objc、obj-c++、go 等,這里只安裝c,c++
4.創建好 makefile 檔案之后,接下來就可以使用 make 命令來編譯 GCC 源程式
#耗時7小時,請規劃好時間
make
make install
使用新的gcc編譯redis
CC=/opt/app/gcc-10.2.0/bin/gcc make
make install PREFIX=/opt/app/redis6.0.8
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/26585.html
標籤:其他
上一篇:kettle可以正常執行hive陳述句,但計算表中記錄數報錯
下一篇:GOLAND路徑報錯求助
