undefined reference to `pow' when building with -flto

Bug #778292 reported by Steve Langasek
32
This bug affects 6 people
Affects Status Importance Assigned to Milestone
binutils
Fix Released
Medium
gcc
Invalid
Medium
binutils (Ubuntu)
Fix Released
Medium
Unassigned
Oneiric
Fix Released
Medium
Unassigned
gcc-4.6 (Ubuntu)
Invalid
Medium
Unassigned
Oneiric
Invalid
Medium
Unassigned

Bug Description

Binary package hint: gcc-4.6

cairo fails to build in oneiric, because linking with -flto results in an undefined reference:

/bin/bash ../../libtool --tag=CC --mode=link gcc -D_REENTRANT -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -Wall -Wextra -Wold-style-definition -Wdeclaration-after-statement -Wmissing-declarations -Werror-implicit-function-declaration -Wnested-externs -Wpointer-arith -Wwrite-strings -Wsign-compare -Wstrict-prototypes -Wmissing-prototypes -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wbad-function-cast -Wvolatile-register-var -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline -Wlogical-op -fno-strict-aliasing -fno-common -flto -Wp,-D_FORTIFY_SOURCE=2 -DXCB_GENERIC_ERROR_HAS_MAJOR_MINOR_CODES -g -O2 -Wall -g -version-info 11002:2:11000 -no-undefined -Wl,-Bsymbolic-functions -Wl,-z,defs -Wl,-O1 -Wl,--as-needed -o libcairo-script-interpreter.la -rpath /usr/lib/x86_64-linux-gnu libcairo_script_interpreter_la-cairo-script-file.lo libcairo_script_interpreter_la-cairo-script-hash.lo libcairo_script_interpreter_la-cairo-script-interpreter.lo libcairo_script_interpreter_la-cairo-script-objects.lo libcairo_script_interpreter_la-cairo-script-operators.lo libcairo_script_interpreter_la-cairo-script-scanner.lo libcairo_script_interpreter_la-cairo-script-stack.lo ../../src/libcairo.la -lpthread -lpixman-1 -L/usr/lib/x86_64-linux-gnu -lfontconfig -L/usr/lib/x86_64-linux-gnu -lfreetype -L/usr/lib/x86_64-linux-gnu -lpng12 -L/usr/lib/x86_64-linux-gnu -lxcb-shm -lxcb -L/usr/lib/x86_64-linux-gnu -lxcb-render -lxcb -L/usr/lib/x86_64-linux-gnu -lXrender -lX11 -L/usr/lib/x86_64-linux-gnu -lX11 -lz -lz -lz -lm
libtool: link: gcc -shared -fPIC -DPIC .libs/libcairo_script_interpreter_la-cairo-script-file.o .libs/libcairo_script_interpreter_la-cairo-script-hash.o .libs/libcairo_script_interpreter_la-cairo-script-interpreter.o .libs/libcairo_script_interpreter_la-cairo-script-objects.o .libs/libcairo_script_interpreter_la-cairo-script-operators.o .libs/libcairo_script_interpreter_la-cairo-script-scanner.o .libs/libcairo_script_interpreter_la-cairo-script-stack.o -Wl,-rpath -Wl,/build/buildd/cairo-1.10.2/debian/build/main/src/.libs -Wl,--as-needed ../../src/.libs/libcairo.so -lpthread -lpixman-1 -L/usr/lib/x86_64-linux-gnu -lfontconfig /usr/lib/x86_64-linux-gnu/libfreetype.so -lpng12 -lxcb-shm -lxcb-render -lxcb -lXrender -lX11 -lz -lm -flto -O2 -Wl,-Bsymbolic-functions -Wl,-z -Wl,defs -Wl,-O1 -Wl,-soname -Wl,libcairo-script-interpreter.so.2 -o .libs/libcairo-script-interpreter.so.2.11000.2
/tmp/ccbzCZUW.ltrans11.ltrans.o: In function `_csi_parse_number':
ccbzCZUW.ltrans11.o:(.text+0x1074): undefined reference to `pow'
collect2: ld returned 1 exit status
/tmp/ccJCGA7g.ltrans11.ltrans.o: In function `_csi_parse_number':
ccJCGA7g.ltrans11.o:(.text+0x1074): undefined reference to `pow'
collect2: ld returned 1 exit status

https://launchpad.net/ubuntu/+source/cairo/1.10.2-2ubuntu3/+buildjob/2530315

Given that -lm is being explicitly passed, and pow is a symbol provided by libm, that looks like a bug in gcc to me?

Running the same command without -flto works just fine.

Related branches

Matthias Klose (doko)
Changed in gcc-4.6 (Ubuntu):
importance: Undecided → Medium
status: New → Confirmed
Revision history for this message
Matthias Klose (doko) wrote :

only seen with the combination of -Wl,--as-needed and -flto

Revision history for this message
Lorenzo Pistone (mrpisto) wrote :

might be related with the problem I encounter in compiling Cube 2: Sauerbraten with -flto[=n]:

/usr/bin/ld: /tmp/cc5LO1Ap.ltrans14.ltrans.o: undefined reference to symbol 'cosf@@GLIBC_2.2.5'
/usr/bin/ld: note: 'cosf@@GLIBC_2.2.5' is defined in DSO /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.6.1/../../../libm.so so try adding it to the linker command line
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.6.1/../../../libm.so: could not read symbols: Invalid operation

some people say that adding -lm at the end of the linker command fixes it, but it's not the case here. Of course, compiling goes fine without -flto.

Revision history for this message
abma (abma) wrote :

i get a similar error when compiling spring rts:

/usr/lib/x86_64-linux-gnu/libieee.a:(.data+0x0): multiple definition of `_LIB_VERSION'
/usr/lib/x86_64-linux-gnu/libieee.a:(.data+0x0): first defined here
/usr/bin/ld: /tmp/cc6IDeOO.ltrans12.ltrans.o: undefined reference to symbol 'tan@@GLIBC_2.2.5'
/usr/bin/ld: note: 'tan@@GLIBC_2.2.5' is defined in DSO /usr/lib/x86_64-linux-gnu/libm.so so try adding it to the linker command line
/usr/lib/x86_64-linux-gnu/libm.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status

without flto it compiles fine.

Revision history for this message
Otus (jan-varho) wrote :

I have a simple test case. Compiling the attached program without -flto works:

gcc -o test-flto test-flto.c -lm

But with -flto an error is reported:

gcc -flto -o test-flto test-flto.c -lm

This is with gcc 4.6.1-7ubuntu1 - OTOH the gcc 4.5 from Natty compiles both successfully.

Revision history for this message
In , Krisztian-kocsis-0 (krisztian-kocsis-0) wrote :

Created attachment 25250
Verbose linker output.

When I try to build udev with gcc-4.6.1, the accelerometer module fails to link because of undefined references to sqrt, atan, etc. Unfortunately -lm is explicitly specified. If I remove -flto or -Wl,--as-needed, the module links successfully.

Verbose linker output is attached.

Revision history for this message
In , Doko-v (doko-v) wrote :

$ cat test-flto.c
#include <math.h>
#include <stdio.h>

int main()
{
        printf("%le\n", gamma(42));
        return 0;
}

$ gcc -Wl,--as-needed -flto test-flto.c -lm
/tmp/ccXjDUDX.ltrans0.ltrans.o: In function `main':
ccXjDUDX.ltrans0.o:(.text+0xd): undefined reference to `gamma'
collect2: ld returned 1 exit status

$ gcc -B/usr/lib/gold-ld/ -Wl,--as-needed -flto -o test-flto test-flto.c -lm
does work

Revision history for this message
In , Matthias Klose (doko) wrote :

$ cat test-flto.c
#include <math.h>
#include <stdio.h>

int main()
{
        printf("%le\n", gamma(42));
        return 0;
}

$ gcc -Wl,--as-needed -flto test-flto.c -lm
/tmp/ccXjDUDX.ltrans0.ltrans.o: In function `main':
ccXjDUDX.ltrans0.o:(.text+0xd): undefined reference to `gamma'
collect2: ld returned 1 exit status

$ gcc -B/usr/lib/gold-ld/ -Wl,--as-needed -flto -o test-flto test-flto.c -lm
does work

see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50367

Revision history for this message
In , Doko-v (doko-v) wrote :
Changed in gcc:
importance: Unknown → Medium
status: Unknown → New
Revision history for this message
In , Alan Modra (amodra-gmail) wrote :

Not a gcc bug.

Revision history for this message
In , Alan Modra (amodra-gmail) wrote :
Changed in binutils:
importance: Unknown → Medium
status: Unknown → Fix Released
Matthias Klose (doko)
Changed in binutils (Ubuntu):
importance: Undecided → Medium
status: New → Confirmed
Changed in gcc-4.6 (Ubuntu Oneiric):
status: Confirmed → Invalid
Changed in binutils (Ubuntu Oneiric):
status: Confirmed → In Progress
Revision history for this message
matt_hargett (matt-use) wrote :

I really need this fix to continue performance/size benchmarking on LTO-compiled libraries/binaries. Any estimates on when the released fix will be integrated and available via the public apt repo?

Thanks!

Changed in gcc:
status: New → Invalid
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package binutils - 2.21.53.20110810-0ubuntu3

---------------
binutils (2.21.53.20110810-0ubuntu3) oneiric; urgency=low

  * Fix PR ld/13201, link error with --as-needed and -flto. LP: #778292.
    LP: #690194.
 -- Matthias Klose <email address hidden> Tue, 20 Sep 2011 11:34:33 +0200

Changed in binutils (Ubuntu Oneiric):
status: In Progress → Fix Released
Revision history for this message
In , Hjl-tools (hjl-tools) wrote :

*** Bug 13182 has been marked as a duplicate of this bug. ***

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Bug attachments

Remote bug watches

Bug watches keep track of this bug in other bug trackers.