неопределенная перекрестная компиляция ссылок с использованием LTO в GCC

Я пытаюсь использовать GCC 4.9.2 для кросс-компиляции приложения из Linux (x86_64-pc-linux-gnu) для Windows (x86_64-w64-mingw32).

При создании целей, которые связываются со статическими библиотеками, а также с использованием оптимизации времени соединения, я получаю неопределенные ошибки ссылок от компоновщика для всех символов, которые цель использует из библиотеки.

например, создание bar.a из bar.cpp

int bar (void) {return 42;}

и связь с foo.cpp

extern int bar (void);
int main (int, char**) {bar ();}

используя командную строку

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

Приводит к ошибке

/tmp/ccc3Twsc.lto.o:foo.o:(.text+0x15): undefined reference to `bar()'
collect2: error: ld returned 1 exit status

Сверху:

Я использую gcc-обертки для ar / ranlibнет внешних зависимостейвсе файлы скомпилированы с одинаковыми параметрами

Я пытался использовать различные комбинации -fuse-linker-plugin, gcc-ar против ar, опции видимости символов, optimsations и т. Д., Но я не могу заставить его правильно ссылаться без отключения LTO.

Все цели собираются правильно под собственным компилятором (x86_64 Linux).

Есть что-то очевидное, что я здесь упускаю?

Ответы на вопрос(1)

Ваш ответ на вопрос