[systemd-devel] Compilation with gcc-4.9 fails
Jan Engelhardt
jengelh at inai.de
Sun Mar 2 22:51:26 PST 2014
Just informing you…
When building with GCC 4.9.0 [svn r208221], then the following happens:
$ make
[...]
make --no-print-directory all-recursive
Making all in .
CC src/libsystemd/sd-bus/libsystemd_la-sd-bus.lo
CC src/libsystemd/sd-bus/libsystemd_la-bus-control.lo
CC src/libsystemd/sd-bus/libsystemd_la-bus-error.lo
[...]
$ nm src/libsystemd/sd-bus/.libs/libsystemd_la-sd-bus.o
0000000000000001 C __gnu_lto_slim
0000000000000001 C __gnu_lto_v1
systemd enables -flto by default, but the actual symbols are no
longer generated with gcc-4.9. They were in gcc-4.8, but perhaps LTO
was not effective in that version.
As a result, the "-export-symbols-regex" option passed to libtool
(see Makefile.am for it) yields no results as it relies on nm output.
Therefore, file .libs/libgudev-1.0.ver that is generated by
"-export-symbols-regex" is empty and causes further linker errors
down the road.
$ make
CCLD libgudev-1.0.la
/usr/bin/ld.gold: error: .libs/libgudev-1.0.ver:2:1: syntax error, unexpected LOCAL, expecting STRING or QUOTED_STRING or EXTERN
/usr/bin/ld.gold: fatal error: unable to parse version script file .libs/libgudev-1.0.ver
collect2: error: ld returned 1 exit status
(Problem 2 (which has been reported): libtool should have warned about
an empty .ver, but it does not, leading to an undescriptive error.)
Further down one may spot, but that is just a result of the previous ones.
CCLD systemd-cgls
src/cgls/cgls.c:131: error: undefined reference to 'log_parse_environment'
src/cgls/cgls.c:132: error: undefined reference to 'log_open'
src/cgls/cgls.c:214: error: undefined reference to 'pager_close'
More information about the systemd-devel
mailing list