L版之后master ceph编译问题总结
Posted ygtff
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L版之后master ceph编译问题总结相关的知识,希望对你有一定的参考价值。
-
run-make-check.sh报错
-- we are x84_64
-- Performing Test not_arch_x32
-- Performing Test not_arch_x32 - Failed
-- we are x32; no yasm
for
you
-- Performing Test COMPILER_SUPPORTS_CXX17
-- Performing Test COMPILER_SUPPORTS_CXX17 - Failed
CMake Error at src/CMakeLists.txt:
149
(message):
The compiler /usr/bin/c++ has no C++
17
support.
解决: 1. 社区已经考虑到Centos下的gcc、cmake版本比较低,不支持C++17,因此在install-deps.sh中处理: 1. yum install centos-release-scl 2. yum install devtoolset-7 3. scl enable devtoolset-7 bash 这样,就可以使用高版本的cmake和gcc了。也就是使用的开发环境,不影响机器上的运行gcc、cmake版本。 2. 参考: ...
-
Dpdk编译报错
In file included from /opt/rh/devtoolset-
6
/root/usr/lib/gcc/x86_64-redhat-linux/
6.3
.
1
/include/x86intrin.h:
39
:
0
,
from /root/work/source/submit/ceph/build/src/dpdk/include/rte_vect.h:
56
,
from /root/work/source/submit/ceph/build/src/dpdk/include/rte_memcpy.h:
46
,
from /root/work/source/submit/ceph/build/src/dpdk/include/rte_mempool.h:
79
,
from env.c:
41
:
/root/work/source/submit/ceph/build/src/dpdk/include/rte_memcpy.h: In function
'rte_memcpy_generic'
:
/opt/rh/devtoolset-
6
/root/usr/lib/gcc/x86_64-redhat-linux/
6.3
.
1
/include/tmmintrin.h:
185
:
1
: error: inlining failed in call to always_inline
'_mm_alignr_epi8'
: target specific option mismatch
_mm_alignr_epi8(__m128i __X, __m128i __Y,
const
int
__N)
Google了半天,很多人都有遇到dpdk的这个问题,但是没看到解决方法,有人说是vm的问题。没有深入的找这个解决办法。
就准备直接关闭dpdk的编译,但是一看buidl/CMakeCache.txt发现是关的: WITH_DPDK:BOOL=OFF,这就怪异了,关了DPDK的编译,为什么还会编译,肯定还有其他地方直接就编译了。
于是去ceph源码顶级目录下看CMakeLists.txt找DPDK,也没什么,也是判断with_dpdk,然后再处理的。
继续搜一下spdk,是打开的,然后会build_spdk,这个build_spdk是在cmake/modules/BuildSPDK.cmake文件里,然后在文件一开始就看到了如下代码:
if(NOT TARGET dpdk-ext)
include(BuildDPDK)
build_dpdk()
endif()
原来是在这里打开了dpdk的编译,这下就清楚了,直接关闭spdk的编译项:
在CMakeLists.cc中将
if(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|amd64|x86_64|AMD64|aarch64")分支下原来的ON,改成OFF
option(WITH_SPDK "Enable SPDK" OFF)
重新再build目录下
[root@ygt build]# cmake -DBOOST_J=8 -DWITH_CCACHE=ON ..尝试解决dpdk编译问题的链接:【TODO:解决该问题】
-
Leveldb报错
../../lib/libos.a(LevelDBStore.cc.o): In function `LevelDBStore::repair(std::ostream&)':
/root/work/source/submit/ceph/src/kv/LevelDBStore.cc:
208
: undefined reference to `leveldb::RepairDB(std::__cxx11::basic_string<
char
, std::char_traits<
char
>, std::allocator<
char
> >
const
&, leveldb::Options
const
&)'
/root/work/source/submit/ceph/src/kv/LevelDBStore.cc:
212
: undefined reference to `leveldb::Status::ToString[abi:cxx11]()
const
'
../../lib/libos.a(LevelDBStore.cc.o): In function `LevelDBStore::do_open(std::ostream&, bool)':
/root/work/source/submit/ceph/src/kv/LevelDBStore.cc:
134
: undefined reference to `leveldb::DB::Open(leveldb::Options
const
&, std::__cxx11::basic_string<
char
, std::char_traits<
char
>, std::allocator<
char
> >
const
&, leveldb::DB**)'
/root/work/source/submit/ceph/src/kv/LevelDBStore.cc:
137
: undefined reference to `leveldb::Status::ToString[abi:cxx11]()
const
'
../../lib/libos.a(LevelDBStore.cc.o): In function `LevelDBStore::_test_init(std::__cxx11::basic_string<
char
, std::char_traits<
char
>, std::allocator<
char
> >
const
&)':
/root/work/source/submit/ceph/src/kv/LevelDBStore.cc:
167
: undefined reference to `leveldb::DB::Open(leveldb::Options
const
&, std::__cxx11::basic_string<
char
, std::char_traits<
char
>, std::allocator<
char
> >
const
&, leveldb::DB**)'
leveldb也已经安装了,leveldb动态库在/usr/lib64下也有。leveldb的很多头文件在/usr/include下也有。为什么失败呢?
从网上找了一段leveldb的测试程序:直接通过这段程序来测试leveldb是否可用。排除掉是ceph的bug。
[root
@ygt
c++]# cat leveldb_test.cc
#include <iostream>
#include <leveldb/db.h>
//#include <assert>
int
main (
int
argc,
char
* argv[])
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing =
true
;
std::string dbpath =
"testdb"
;
leveldb::Status status = leveldb::DB::Open(options, dbpath, &db);
assert
(status.ok ());
std::string key =
"test"
;
std::string val =
"test_value"
;
status = db->Put(leveldb::WriteOptions (), key, val);
val.clear ();
status = db->Get(leveldb::ReadOptions (), key, &val);
std::cout << key <<
": "
<< val << std::endl;
编译:也报同样的错:
[root
@ygt
c++]# g++ -lleveldb -lpthread leveldb_test.cc
/tmp/cc7BQ3E6.o: In function `main':
leveldb_test.cc:(.text+
0x7e
): undefined reference to `leveldb::DB::Open(leveldb::Options
const
&, std::__cxx11::basic_string<
char
, std::char_traits<
char
>, std::allocator<
char
> >
const
&, leveldb::DB**)'
collect2: error: ld returned
1
exit status
这个时候就怀疑是leveldb版本过低,当前是1.12,于是看了一下github上leveldb的版本,是差了好多版本。
我没有直接去下载最新版本的leveldb,还是下载了1.12版本的leveldb源码:因为我觉得可能还是和当前的这个leveldb是低版本gcc编译造成的问题。
[root
@ygt
source]# git clone git
@github
.com:google/leveldb.git
编译:
[root
@ygt
leveldb]# make
编译完成后:找一下动态库
[root
@ygt
leveldb]# cd out-shared/
[root
@ygt
out-shared]# ls
c_test db db_bench helpers libleveldb.so libleveldb.so.
1
libleveldb.so.
1.20
port table util
将新编译的动态库替换掉原来的库:
[root
@ygt
out-shared]# cp libleveldb.so* /usr/lib64/
[root
@ygt
lib64]# ll libleveldb.so*
-rwxr-xr-x.
1
root root
423152
Mar
8
02
:
22
libleveldb.so
-rwxr-xr-x.
1
root root
423152
Mar
8
02
:
22
libleveldb.so.
1
-rwxr-xr-x.
1
root root
348928
May
17
2016
libleveldb.so.
1.0
.
7
-rwxr-xr-x.
1
root root
423152
Mar
8
02
:
22
libleveldb.so.
1.20
[root
@ygt
lib64]# rm libleveldb.so libleveldb.so.
1
[root
@ygt
lib64]# ll libleveldb.so*
-rwxr-xr-x.
1
root root
348928
May
17
2016
libleveldb.so.
1.0
.
7
-rwxr-xr-x.
1
root root
423152
Mar
8
02
:
22
libleveldb.so.
1.20
[root
@ygt
lib64]# ln -s libleveldb.so.
1.20
libleveldb.so
[root
@ygt
lib64]# ln -s libleveldb.so.
1.20
libleveldb.so.
1
[root
@ygt
lib64]# ll libleveldb.so*
lrwxrwxrwx.
1
root root
18
Mar
8
02
:
23
libleveldb.so -> libleveldb.so.
1.20
lrwxrwxrwx.
1
root root
18
Mar
8
02
:
23
libleveldb.so.
1
-> libleveldb.so.
1.20
-rwxr-xr-x.
1
root root
348928
May
17
2016
libleveldb.so.
1.0
.
7
-rwxr-xr-x.
1
root root
423152
Mar
8
02
:
22
libleveldb.so.
1.20
保险起见,把include下的头文件也替换掉:
[root
@ygt
include]# cp -r leveldb/ /usr/include/
使用leveldb测试程序验证一下:(编译通过)
[root
@ygt
c++]# g++ leveldb_test.cc -lleveldb -lpthread
附:(Ceph安装了这些,但是并没有去设置source只是提示了而已 . . .)
|
以上是关于L版之后master ceph编译问题总结的主要内容,如果未能解决你的问题,请参考以下文章