Обсуждение: Compile issue with glibc-2.27 (copy_file_range)
Hi, according to changlelog of glibc-2.27 they introduced a new function named "copy_file_range". There is a static function in src/bin/pg_rewind/copy_fetch.c with the same name and therefore compilation fails with >>>>>>>> gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after- statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -I../../../src/interfaces/libpq -DFRONTEND -I../../../src/include - D_GNU_SOURCE -c -o copy_fetch.o copy_fetch.c copy_fetch.c:159:1: Fehler: In Konflikt stehende Typen für »copy_file_range« copy_file_range(const char *path, off_t begin, off_t end, bool trunc) ^~~~~~~~~~~~~~~ In file included from copy_fetch.c:15:0: /usr/include/unistd.h:1110:9: Anmerkung: Vorherige Deklaration von »copy_file_range« war hier ssize_t copy_file_range (int __infd, __off64_t *__pinoff, ^~~~~~~~~~~~~~~ make[3]: *** [<eingebaut>: copy_fetch.o] Fehler 1 make[3]: Verzeichnis „/tmp/postgresql/build/postgresql- 10.1/src/bin/pg_rewind“ wird verlassen make[2]: *** [Makefile:40: all-pg_rewind-recurse] Fehler 2 make[2]: Verzeichnis „/tmp/postgresql/build/postgresql-10.1/src/bin“ wird verlassen make[1]: *** [Makefile:37: all-bin-recurse] Fehler 2 make[1]: Verzeichnis „/tmp/postgresql/build/postgresql-10.1/src“ wird verlassen make: *** [GNUmakefile:11: all-src-recurse] Fehler 2 <<<<<<<< Since postgresql's copy_file_range is static/local to only one file, its easy to fix: sed -e "s/copy_file_range/pg_&/" \ -i src/bin/pg_rewind/copy_fetch.c which renames "copy_file_range" to "pg_copy_file_range". Find attached a patch doing the same. System: Linux (LFS 20180202) glibc: 2.27 gcc: 7.3 Kernel: 4.15.1 PgSql: 10.1 -- Thomas
Вложения
> On 4 February 2018 at 14:21, Thomas Trepl <thomas@linuxfromscratch.org> wrote: > according to changlelog of glibc-2.27 they introduced a new function > named "copy_file_range". > > There is a static function in src/bin/pg_rewind/copy_fetch.c with the > same name and therefore compilation fails with It was already renamed some time ago, see commit [1] [1]: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=3e68686e2c55799234ecd020bd1621f913d65475;hp=99d5a3ffb9fe61a5a8b01a4759d93c627f018923
On Sun, Feb 04, 2018 at 02:21:38PM +0100, Thomas Trepl wrote: > according to changlelog of glibc-2.27 they introduced a new function > named "copy_file_range". Yes, some buildfarm machines caught that already. Here is the commit fixing it, which will be available in next week's round of minor releases: commit: 3e68686e2c55799234ecd020bd1621f913d65475 author: Andres Freund <andres@anarazel.de> date: Wed, 3 Jan 2018 12:40:32 -0800 Rename pg_rewind's copy_file_range() to avoid conflict with new linux syscall. Upcoming versions of glibc will contain copy_file_range(2), a wrapper around a new linux syscall for in-kernel copying of data ranges. This conflicts with pg_rewinds function of the same name. Therefore rename pg_rewinds version. As our version isn't a generic copying facility we decided to choose a rewind specific function name. Per buildfarm animal caiman and subsequent discussion with Tom Lane. Author: Andres Freund Discussion: https://postgr.es/m/20180103033425.w7jkljth3e26sduc@alap3.anarazel.de https://postgr.es/m/31122.1514951044@sss.pgh.pa.us Backpatch: 9.5-, where pg_rewind was introduced This report reminds me that I haven't patched yet the version of pg_rewind for REL9_4_STABLE and REL9_3_STABLE that I maintain for VMware. Will do that now.. -- Michael