Redis构建失败
Redis build failure
我正在尝试在我的 aws linux 服务器上构建 redis,以便访问 redis-cli 并连接到我的 redis 实例,该实例也在 aws 中成功 运行。
我的 gcc 是:
gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
我下载了源代码并开始构建:
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make distclean
make
它构建了依赖关系,然后给了我这个:
gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/tsd.o src/tsd.c
gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/witness.o src/witness.c
ar crus lib/libjemalloc.a src/jemalloc.o src/arena.o src/background_thread.o src/base.o src/bin.o src/bitmap.o src/ckh.o src/ctl.o src/div.o src/extent.o src/extent_dss.o src/extent_mmap.o src/hash.o src/hooks.o src/large.o src/log.o src/malloc_io.o src/mutex.o src/mutex_pool.o src/nstime.o src/pages.o src/prng.o src/prof.o src/rtree.o src/stats.o src/sz.o src/tcache.o src/ticker.o src/tsd.o src/witness.o
make[3]: Leaving directory `/home/ec2-user/redis-stable/deps/jemalloc'
make[2]: Leaving directory `/home/ec2-user/redis-stable/deps'
CC adlist.o
CC quicklist.o
CC ae.o
CC anet.o
CC dict.o
CC server.o
In file included from server.c:30:0:
server.h:1044:5: error: expected specifier-qualifier-list before ‘_Atomic’
_Atomic unsigned int lruclock; /* Clock for LRU eviction */
^
server.c: In function ‘serverLogRaw’:
server.c:1028:31: error: ‘struct redisServer’ has no member named ‘logfile’
int log_to_stdout = server.logfile[0] == '[=12=]';
^
server.c:1031:23: error: ‘struct redisServer’ has no member named ‘verbosity’
if (level < server.verbosity) return;
^
server.c:1033:47: error: ‘struct redisServer’ has no member named ‘logfile’
fp = log_to_stdout ? stdout : fopen(server.logfile,"a");
...还有更多
我想我一定做错了什么,因为毫无疑问,这是为其他人构建的代码。我是一名 java 开发人员,几乎没有 c 语言背景。任何指针将不胜感激。
周杰伦
似乎构建 redis 6x 需要 gcc >= 4.9 ...
我成功了。
起初我想安装 gcc6,但再次失败,然后我注意到,devtoolset-6 已被弃用。也许你应该试试 -7 或 -8。
然后我使用 flow cmd 并且成功了
yum install -y devtoolset-6-gcc devtoolset-7-gcc-c++
所以希望也能帮到你
感谢您的回复。我最终得到的解决方案是使用 CentOS8 和 gcc 8.3.1 构建一个新服务器。这种组合毫无问题地构建了 redis 服务器 6.0.3。道德:您需要拥有最新的基础设施和软件才能正确构建新软件。
下载旧版本,6.0 似乎有些问题。*
在 ubuntu 14.04 LTS
上对我有用
这里的问题是最新的 Redis 版本 (6.0.7
) 依赖于 _Atomic
,旧的 gcc 4.8.5
不支持它。
如果无法更新 gcc 版本,也可以使用 clang
编译最新的 Redis 代码。
$ cd redis-stable
$ CC=clang make
我正在尝试在我的 aws linux 服务器上构建 redis,以便访问 redis-cli 并连接到我的 redis 实例,该实例也在 aws 中成功 运行。
我的 gcc 是:
gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
我下载了源代码并开始构建:
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make distclean
make
它构建了依赖关系,然后给了我这个:
gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/tsd.o src/tsd.c
gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/witness.o src/witness.c
ar crus lib/libjemalloc.a src/jemalloc.o src/arena.o src/background_thread.o src/base.o src/bin.o src/bitmap.o src/ckh.o src/ctl.o src/div.o src/extent.o src/extent_dss.o src/extent_mmap.o src/hash.o src/hooks.o src/large.o src/log.o src/malloc_io.o src/mutex.o src/mutex_pool.o src/nstime.o src/pages.o src/prng.o src/prof.o src/rtree.o src/stats.o src/sz.o src/tcache.o src/ticker.o src/tsd.o src/witness.o
make[3]: Leaving directory `/home/ec2-user/redis-stable/deps/jemalloc'
make[2]: Leaving directory `/home/ec2-user/redis-stable/deps'
CC adlist.o
CC quicklist.o
CC ae.o
CC anet.o
CC dict.o
CC server.o
In file included from server.c:30:0:
server.h:1044:5: error: expected specifier-qualifier-list before ‘_Atomic’
_Atomic unsigned int lruclock; /* Clock for LRU eviction */
^
server.c: In function ‘serverLogRaw’:
server.c:1028:31: error: ‘struct redisServer’ has no member named ‘logfile’
int log_to_stdout = server.logfile[0] == '[=12=]';
^
server.c:1031:23: error: ‘struct redisServer’ has no member named ‘verbosity’
if (level < server.verbosity) return;
^
server.c:1033:47: error: ‘struct redisServer’ has no member named ‘logfile’
fp = log_to_stdout ? stdout : fopen(server.logfile,"a");
...还有更多
我想我一定做错了什么,因为毫无疑问,这是为其他人构建的代码。我是一名 java 开发人员,几乎没有 c 语言背景。任何指针将不胜感激。
周杰伦
似乎构建 redis 6x 需要 gcc >= 4.9 ...
我成功了。 起初我想安装 gcc6,但再次失败,然后我注意到,devtoolset-6 已被弃用。也许你应该试试 -7 或 -8。
然后我使用 flow cmd 并且成功了
yum install -y devtoolset-6-gcc devtoolset-7-gcc-c++
所以希望也能帮到你
感谢您的回复。我最终得到的解决方案是使用 CentOS8 和 gcc 8.3.1 构建一个新服务器。这种组合毫无问题地构建了 redis 服务器 6.0.3。道德:您需要拥有最新的基础设施和软件才能正确构建新软件。
下载旧版本,6.0 似乎有些问题。* 在 ubuntu 14.04 LTS
上对我有用这里的问题是最新的 Redis 版本 (6.0.7
) 依赖于 _Atomic
,旧的 gcc 4.8.5
不支持它。
如果无法更新 gcc 版本,也可以使用 clang
编译最新的 Redis 代码。
$ cd redis-stable
$ CC=clang make