unrecognized command line option ‘-Wimplicit-fallthrough=3’

  编译PG插件时,报"unrecognized command line option ‘-Wimplicit-fallthrough=3’"。

  关于implicit-fallthrough选项:

  As of GCC 7-Wimplicit-fallthrough is supported and __attribute__((fallthrough)) can be used to suppress the warnings when fallthrough is intentional. GCC does recognize "fallthrough" comments in certain scenarios, but it can be confused fairly easily.

  而编译用的是gcc (GCC) 4.8.5,且没有地方指定了该选项。

  唯一原因就是pg本身使用gcc 7编译的,可通过pg_config来确定编译用的选项。

复制代码
[zjh@lightdb1 zhparser-0.2.0]$ pg_config 
BINDIR = /home/zjh/pgsql13.2/bin
DOCDIR = /home/zjh/pgsql13.2/share/doc
HTMLDIR = /home/zjh/pgsql13.2/share/doc
INCLUDEDIR = /home/zjh/pgsql13.2/include
PKGINCLUDEDIR = /home/zjh/pgsql13.2/include
INCLUDEDIR-SERVER = /home/zjh/pgsql13.2/include/server
LIBDIR = /home/zjh/pgsql13.2/lib
PKGLIBDIR = /home/zjh/pgsql13.2/lib
LOCALEDIR = /home/zjh/pgsql13.2/share/locale
MANDIR = /home/zjh/pgsql13.2/share/man
SHAREDIR = /home/zjh/pgsql13.2/share
SYSCONFDIR = /home/zjh/pgsql13.2/etc
PGXS = /home/zjh/pgsql13.2/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE =  '--prefix=/home/zjh/pgsql13.2' '--enable-depend' '--enable-cassert' '--enable-debug' 'CFLAGS=-DLOCK_DEBUG -DBTREE_BUILD_STATS -DWAL_DEBUG -DCATCACHE_STATS -ggdb -O0' '--enable-dtrace' '--enable-nls=gbk' '--with-openssl' '--with-libxml' '--with-zlib' '--with-llvm' 'LLVM_CONFIG=/opt/rh/llvm-toolset-7/root/usr/bin/llvm-config' '--enable-profiling'
CC = gcc
CPPFLAGS = -D_GNU_SOURCE -I/usr/include/libxml2
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -g -pg -DLINUX_PROFILE -DLOCK_DEBUG -DBTREE_BUILD_STATS -DWAL_DEBUG -DCATCACHE_STATS -ggdb -O0
CFLAGS_SL = -fPIC
LDFLAGS = -L/opt/rh/llvm-toolset-7/root/usr/lib64 -Wl,--as-needed -Wl,-rpath,'/home/zjh/pgsql13.2/lib',--enable-new-dtags
LDFLAGS_EX = 
LDFLAGS_SL = 
LIBS = -lpgcommon -lpgport -lpthread -lxml2 -lssl -lcrypto -lz -lreadline -lrt -ldl -lm 
VERSION = PostgreSQL 13.2
复制代码

  遗憾的是,没有pg_config选项可以修改其配置。

  所以,要么用gcc 4.8.5重新编译pg,要么切换到7.3.1和pg_config的配置一致,例如llvm,可以从别的环境拷贝一个过来。

  4.8.5重新编译后的选项如下:

复制代码
[zjh@lightdb1 postgresql-13.2]$ pg_config 
BINDIR = /home/zjh/pgsql13.2/bin
DOCDIR = /home/zjh/pgsql13.2/share/doc
HTMLDIR = /home/zjh/pgsql13.2/share/doc
INCLUDEDIR = /home/zjh/pgsql13.2/include
PKGINCLUDEDIR = /home/zjh/pgsql13.2/include
INCLUDEDIR-SERVER = /home/zjh/pgsql13.2/include/server
LIBDIR = /home/zjh/pgsql13.2/lib
PKGLIBDIR = /home/zjh/pgsql13.2/lib
LOCALEDIR = /home/zjh/pgsql13.2/share/locale
MANDIR = /home/zjh/pgsql13.2/share/man
SHAREDIR = /home/zjh/pgsql13.2/share
SYSCONFDIR = /home/zjh/pgsql13.2/etc
PGXS = /home/zjh/pgsql13.2/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE =  '--prefix=/home/zjh/pgsql13.2'
CC = gcc -std=gnu99
CPPFLAGS = -D_GNU_SOURCE
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2
CFLAGS_SL = -fPIC
LDFLAGS = -Wl,--as-needed -Wl,-rpath,'/home/zjh/pgsql13.2/lib',--enable-new-dtags
LDFLAGS_EX = 
LDFLAGS_SL = 
LIBS = -lpgcommon -lpgport -lpthread -lz -lreadline -lrt -ldl -lm 
VERSION = PostgreSQL 13.2
复制代码

 

重新编译就不报错了。

 

posted @   zhjh256  阅读(1662)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2016-09-05 nginx/ajax跨子域请求的两种现代方法以及403解决
点击右上角即可分享
微信分享提示