ld.exe: ошибка DWARF: не удалось найти спецификацию переменной по смещению 101cee

Aug 20 2020

Я получаю массовый вывод со следующим сообщением (отличается только шестнадцатеричным адресом):

ld.exe: DWARF error: could not find variable specification at offset 101cee

В чем вообще смысл этой ошибки?

Этого не происходит при компиляции сборки выпуска. Только отладочная сборка.

Ответы

3 Chameleon Aug 20 2020 at 18:24

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

Я компилирую библиотеку как статическую, но без правильной #defineдирективы все экспортируемые функции получают __declspec(dllexport)префикс. Так имена функции functionстали __imp_function.

Итак, это был просто файл undefined reference to __imp_function.

Но почему он так зашифрован? А почему релизная сборка скомпилирована правильно?

Я считаю, что это происходит из-за -fltoопции, которая оптимизирует время компоновки и сохраняет весь код библиотеки внутри файла .a, поэтому ссылки не требуются (без сбоев).