link time optimization issue

Henrik Juul Pedersen hjp@liab.dk
Tue May 13 11:02:00 GMT 2014


Hi,

I've been experimenting with link time optimization with GCC, and have
run into an issue with some existing code:

== Test scenario ==
- foo.c:
int foo ( void ) {
    return 3;
}

- bar.c:
#include <stdio.h>

int foo( void );

int main ( void ) {
    printf("Foo returns: %d\n", foo());
    return 0;
}

== Compilation ==
gcc -flto -O2 -c foo.c
ar rcs libfoo.a foo.o
gcc -flto -O2 -L. bar.c -lfoo -o myprog
/tmp/ccGcDjka.ltrans0.ltrans.o: In function `main':
ccGcDjka.ltrans0.o:(.text+0x5): undefined reference to `foo'
collect2: error: ld returned 1 exit status

However, if I directly include the foo object file:
gcc -flto -O2 bar.c foo.o -o myprog

The program links correctly.

== GCC version ==
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /build/gcc/src/gcc-4.9-20140507/configure
--prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib
--mandir=/usr/share/man --infodir=/usr/share/info
--with-bugurl=https://bugs.archlinux.org/
--enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++
--enable-shared --enable-threads=posix --with-system-zlib
--enable-__cxa_atexit --disable-libunwind-exceptions
--enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp
--enable-gnu-unique-object --enable-linker-build-id
--enable-cloog-backend=isl --disable-cloog-version-check --enable-lto
--enable-plugin --enable-install-libiberty
--with-linker-hash-style=gnu --disable-multilib --disable-werror
--enable-checking=release
Thread model: posix
gcc version 4.9.0 20140507 (prerelease) (GCC)

==

Am I missing something? or is this a bug?
I've tried to enable different verbosity settings in compiler and
linker, but have been unable to find any clear reason for the error.

Regards
Henrik
LIAB ApS



More information about the Gcc-help mailing list