Эта ошибка означает, что по крайней мере один символ не может быть разрешен с помощью lto-plugin
.Действительно, статическая библиотека dds.a
была скомпилирована с более старой версией GCC.Например, если вы попытаетесь прочитать один объектный файл в нем с помощью lto1
, вы получите эту ошибку:
$ /usr/lib/gcc/x86_64-linux-gnu/5/lto1 Par.o
Reading object files: Par.olto1: fatal error: bytecode stream generated with LTO version 2.1 instead of the expected 4.1
Чтобы исправить это, у вас есть два варианта: diable LTO или перекомпилировать dds.a
(как предлагается в комментариях).
Чтобы отключить LTO, вы можете использовать опцию -fno-use-linker-plugin
GCC, но вы получите другую ошибку:
$ g++ -Wall -fno-use-linker-plugin -o bridge bridge.cpp -L. -ldds
/usr/bin/ld : skipping incompatible ./libdds.a when searching for -ldds
Действительно, файл объектов находится вelf32-i386
формат, и вы пытаетесь связать их с elf64-x86-64
форматом файла:
$ objdump -p Par.o
Par.o: file format elf32-i386
$ g++ -c bridge.cpp
$ objdump -p bridge.o
bridge.o: file format elf64-x86-64
На данный момент, единственное хорошее решение связать dds.a
с вашей программой - это перекомпилировать ее с тем же компиляторомвы будете использовать для составления вашего окончательного заявления.