ld.exe: ошибка DWARF: не удалось найти спецификацию переменной по смещению 101cee
Я получаю массовый вывод со следующим сообщением (отличается только шестнадцатеричным адресом):
ld.exe: DWARF error: could not find variable specification at offset 101cee
В чем вообще смысл этой ошибки?
Этого не происходит при компиляции сборки выпуска. Только отладочная сборка.
Ответы
По сути, я просто нашел решение. Помещаю сюда, потому что в StackOverflow такого вопроса не нашел. Пожалуйста, ответьте, если что-то из моих позиций неверно.
Я компилирую библиотеку как статическую, но без правильной #define
директивы все экспортируемые функции получают __declspec(dllexport)
префикс. Так имена функции function
стали __imp_function
.
Итак, это был просто файл undefined reference to __imp_function
.
Но почему он так зашифрован? А почему релизная сборка скомпилирована правильно?
Я считаю, что это происходит из-за -flto
опции, которая оптимизирует время компоновки и сохраняет весь код библиотеки внутри файла .a, поэтому ссылки не требуются (без сбоев).