[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