本地离线编译observer报错

【产品名称】oceanbase

【产品版本】v3.1.2

【问题描述】主机环境:centos7.4 , 主机上安装的软件如下:

gcc.x86_64 4.8.5-36.el7 @local

gcc-c++.x86_64 4.8.5-36.el7 installed

libgcc.x86_64 4.8.5-36.el7 @anaconda

cmake.x86_64 2.8.12.2-2.el7 installed

make.x86_64 1:3.82-23.el7 @anaconda

dbus-glib.x86_64 0.100-7.el7 @anaconda

glib2.x86_64 2.56.1-2.el7 @anaconda

glibc.x86_64 2.17-260.el7 @anaconda

glibc-common.x86_64 2.17-260.el7 @anaconda

glibc-devel.x86_64 2.17-260.el7 @local

glibc-headers.x86_64 2.17-260.el7 @local

cpio.x86_64 2.11-27.el7 @anaconda

问题复现:

1)解压在gitee上现在的tag 为v3.1.2_CE的源码

2)将oceanbase.el7.x86_64.deps文件中描述的依赖包都下载下来放到了deps/3rd/pkg/下

3)执行sh build.sh init (看脚本就是下载并unpackdeps/3rd/pkg/下的包) 执行成功

4)执行sh build.sh release 运行中报错

5)查看CMakeError.log:

Checking whether the ASM compiler is GNU using “–version” did not match “(GNU assembler)|(GCC)|(Free Software Foundation)”: clang version 11.0.1 Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /home/ocbase/lsz/code/oceanbase-v3.1.2_CE/deps/3rd/usr/local/oceanbase/devtools/bin

CMakeError.zip (3675 KB)

从这个cmake报错的日志来看,怀疑对应目录没有写权限

不是目录问题, 是在使用bison生成中间代码时报错:

使用sh build.sh release --trace重新执行

界面报错有显示如下:

行 8682: /root/work/oceanbase/code/gitclone/oceanbase/src/sql/CMakeLists.txt(1143): execute_process(COMMAND bash gen_parser.sh WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src/sql/parser OUTPUT_FILE _gen_parser.output ERROR_FILE _gen_parser.error )

行 8682: /root/work/oceanbase/code/gitclone/oceanbase/src/sql/CMakeLists.txt(1143): execute_process(COMMAND bash gen_parser.sh WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src/sql/parser OUTPUT_FILE _gen_parser.output ERROR_FILE _gen_parser.error )

...

/root/work/oceanbase/code/gitclone/oceanbase/deps/3rd/usr/local/oceanbase/devtools/share/cmake-3.20/Modules/CPack.cmake(874): configure_file(${cpack_source_input_file} ${CPACK_SOURCE_OUTPUT_CONFIG_FILE} @ONLY )

/root/work/oceanbase/code/gitclone/oceanbase/cmake/RPM.cmake(156): add_custom_target(rpm COMMAND +make package DEPENDS observer ob_admin ob_error ob_sql_proxy_parser_static )

-- Configuring done

CMake Error at src/sql/parser/CMakeLists.txt:72 (add_library):

Cannot find source file:

sql_parser_mysql_mode_lex.c

CMake Error at src/sql/parser/CMakeLists.txt:72 (add_library):

No SOURCES given to target: ob_sql_server_parser_objects

CMake Error at src/sql/parser/CMakeLists.txt:88 (add_library):

No SOURCES given to target: ob_sql_proxy_parser_static

CMake Error at src/sql/parser/CMakeLists.txt:65 (add_library):

No SOURCES given to target: ob_sql_proxy_parser_objects

CMake Error at src/sql/parser/CMakeLists.txt:93 (add_library):

No SOURCES given to target: ob_sql_server_parser_static

CMake Generate step failed. Build files cannot be regenerated correctly.

排查过程:

sql_parser_mysql_mode_lex.c该文件在oceanbase v3.1.2版本是在Cmake阶段通过bison生成的中间代码, 是通过自动执行oceanbase/src/sql/parse/gen_parse.sh脚本完成的, 根据日志中行 8682可以发现,在执行该脚本报错后,生成了错误日志在_gen_parser.error, 查看错误日志发现如下报错:

Compile error[0], abort.

查看脚本源码,可知执行以下命令报错:

bison -v -Werror -d ../../../src/sql/parser/sql_parser_mysql_mode.y -o ../../../src/sql/parser/sql_parser_mysql_mode_tab.c

bison 是使用的init阶段从Oceanbase yum源下载并解压的bison, 并不是使用的主机上的, 是sh build.sh release时使用cpio解压后放在了oceanbase/deps/3rd/usr/local/oceanbase/devtools/share/下bison工具目录

obdevtools-bison-2.4.1-3.el7.x86_64.rpm

解决方案:

主机安装bison(bison-3.0.4-2.el7.x86_64.rpm),再执行构建(build.sh release/debug)

待解疑问:

主机本地安装后,再执行构建,bison使用的依然是oceanbase/deps/3rd/usr/local/oceanbase/devtools/share/下的,却能运行成功, 说明使用到了主机的依赖, 是否是自带的bison缺少依赖?m4?

2 个赞