undefined Referenzquerkompilierung statischer Bibliotheken mit LTO unter GCC
Ich versuche, mit GCC 4.9.2 eine Anwendung von Linux (x86_64-pc-linux-gnu) für Windows (x86_64-w64-mingw32) zu kompilieren.
Wenn Ziele erstellt werden, die mit statischen Bibliotheken verknüpft sind und auch die Verbindungszeitoptimierung verwenden, werden vom Linker undefinierte Referenzfehler für alle Symbole angezeigt, die das Ziel aus der Bibliothek verwendet.
eg, Erstellen von bar.a aus bar.cpp
int bar (void) {return 42;}
und Verlinkung mit foo.cpp
extern int bar (void);
int main (int, char**) {bar ();}
unter Verwendung der Befehlszeile
x86_64-w64-mingw32-g++ -flto -o foo.o -c foo.cpp
x86_64-w64-mingw32-g++ -flto -o bar.o -c bar.cpp
x86_64-w64-mingw32-gcc-ar rc bar.a bar.o
x86_64-w64-mingw32-gcc-ranlib bar.a
x86_64-w64-mingw32-g++ -flto -fuse-linker-plugin foo.o bar.a -o foo
Ergebnisse im Fehler
/tmp/ccc3Twsc.lto.o:foo.o:(.text+0x15): undefined reference to `bar()'
collect2: error: ld returned 1 exit status
Von oben
Ich benutze die gcc-Wrapper für ar / ranlibes gibt keine externen Abhängigkeitenalle Dateien werden mit den gleichen Optionen kompiliertIch habe versucht, verschiedene Kombinationen von -fuse-linker-plugin, gcc-ar gegen ar, Symbolsichtbarkeitsoptionen, Optimierungen usw. zu verwenden, aber ich kann es nicht zum korrekten Verbinden bringen, ohne LTO zu deaktivieren.
Alle Ziele werden unter dem nativen Compiler (x86_64 Linux) korrekt erstellt.
Ist da etwas auf der Hand, was ich hier vermisse?