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 kompiliert

Ich 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage