Ubuntu 22.04 编译 OceanBase 4.3.1 报错

【 使用环境 】测试环境
【 OB or 其他组件 】observer
【 使用版本 】4.3.1
【问题描述】在 Ubuntu 22.04 中,编译 OceanBase 4.3.1 时,出现如下错误:


Performing build step for ‘babassl’
CMake Error at /data/oceanbase/build_debug/deps/babassl-subbuild/src/babassl-stamp/babassl-build-Debug.cmake:49 (message):
Command failed: 2
‘make’
See also
/data/oceanbase/build_debug/deps/babassl-subbuild/src/babassl-stamp/babassl-build-*.log


查看 babassl-stamp/babassl-build-err.log 日志文件中详细的错误信息,如下(截取了部分信息,其它报错信息都是一样的):


In file included from /data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/lib/gcc/x86_64-redhat-linux/9/include-fixed/limits.h:194,
from /data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/lib/gcc/x86_64-redhat-linux/9/include-fixed/syslimits.h:7,
from /data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/lib/gcc/x86_64-redhat-linux/9/include-fixed/limits.h:34,
from ./e_os.h:13,
from apps/apps.h:13,
from apps/app_rand.c:10:
/usr/include/limits.h:26:10: fatal error: bits/libc-header-start.h: No such file or directory
26 | #include <bits/libc-header-start.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.


经过查看,bits/libc-header-start.h 文件位于 /usr/include/x86_64-linux-gnu/bits/libc-header-start.h

/data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/bin/gcc -v -E - 的输出如下:


Configured with: ./configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/home/jenkins/agent/workspace/rpm-obdevtools-gcc9-9.3.0-1.1.8/ob_source_code_dir/rpm/.rpm_build/BUILDROOT/obdevtools-gcc9-9.3.0-52022092914.el8.x86_64//usr/local/oceanbase/devtools/ --enable-shared --enable-threads=posix --enable-checking=release --disable-multilib --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --enable-gnu-indirect-function --build=x86_64-redhat-linux
Thread model: posix
gcc version 9.3.0 (GCC)
COLLECT_GCC_OPTIONS=’-v’ ‘-E’ ‘-mtune=generic’ ‘-march=x86-64’
/data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/bin/…/libexec/gcc/x86_64-redhat-linux/9/cc1 -E -quiet -v -iprefix /data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/bin/…/lib/gcc/x86_64-redhat-linux/9/ - -mtune=generic -march=x86-64
#include “…” search starts here:
#include <…> search starts here:
/data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/bin/…/lib/gcc/x86_64-redhat-linux/9/include
/data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/bin/…/lib/gcc/x86_64-redhat-linux/9/include-fixed
/usr/local/include
/data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/bin/…/lib/gcc/…/…/include
/usr/include
End of search list.


从 gcc 的输出来看,它不会去 /usr/include/x86_64-linux-gnu 目录中寻找 bits/libc-header-start.h 头文件。
请问这个问题需要怎么解决?或者还缺少什么信息,需要我提供?

查一下 指令集lscpu | grep avx

指令集如下:
lscpu | grep avx
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d

看着avx指令集 不全呀 ob需要avx指令集

avx 指令集不全会影响 babassl 的编译么?

如果我手动修改 Makefile 文件,加上 -I/usr/include/x86_64-linux-gnu 能编译过去。
例如:


apps/app_rand.o: apps/app_rand.c
$(CC) -I. -Iinclude $(LIB_CFLAGS) $(LIB_CPPFLAGS) -MMD -MF apps/app_rand.d.tmp -MT $@ -c -o $@ apps/app_rand.c
@touch apps/app_rand.d.tmp
@if cmp apps/app_rand.d.tmp apps/app_rand.d > /dev/null 2> /dev/null; then
rm -f apps/app_rand.d.tmp;
else
mv apps/app_rand.d.tmp apps/app_rand.d;
fi


在 $(CC) -I. -Iinclude 后面再加上 -I/usr/include/x86_64-linux-gnu 就能编译过去。

另外,我现在把 OB_USE_BABASSL 都修改为 OFF 了,编译过去了,这样就不使用 babassl 了。

缺少了avx指令集 编译使用都会有问题

收到,谢谢。
我这个找不到头文件的问题,是因为缺少指令集影响的么?
如果是因为缺少指令集影响的,建议在编译的时候做个检查,并给出报错提醒。
如果不是因为缺少指令集影响的,那是因为啥原因呢?

建议使用带有avx指令集的服务器 在进行编译安装 安装再试试是否报错