Как перевести сборку lib с g++ 2.96 в новый формат BFD?
У меня есть файл библиотеки, который был построен с использованием g++ версии 2.96. Исходный код библиотеки недоступен, а также не поддерживается первоначальным разработчиком.
Я хочу связать его с моим приложением, используя последнюю версию g++ (скажем, 4.x). Как я понимаю, схема искажения имени изменилась с момента выпуска gcc veriosn 3.3. Вот почему новый компоновщик не распознает символы в старом файле lib.
Я провел некоторые исследования в сети и изучил такие инструменты, как objcopy, objdump, C++filter и nm и т. Д., И попытался найти и разобрать символы в файле lib вручную, но безрезультатно.
Итак, есть ли способ (или инструмент) преобразовать мой старый двоичный файл lib в новую схему искажения имен, чтобы я мог связать его с помощью более новых компиляторов?
1 ответ
Нет, это невозможно.
Вы не можете просто перевести искаженные имена, есть много других вещей, которые не совместимы между g++ 2.96 и g++ 4.x, включая расположение объектов, механизм обработки исключений, реализацию стандартной библиотеки, как работают виртуальные функции и т.п.
Либо получите исходный код для старой библиотеки, либо соберите все с помощью g++ 2.96, либо замените старую библиотеку новым кодом с таким же поведением.