У меня есть проект с несколькими связанными библиотеками. Одна конкретная библиотека связана с другой и вызывает символ, который, как утверждает компоновщик, не определен.
Я связался с библиотекой, которая должна иметь этот символ в файле .pro как таковой:
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../SourceLibrary/release/ -lSourceLibrary
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../SourceLibrary/debug/ -lSourceLibrary
else:unix: LIBS += -L$$OUT_PWD/../SourceLibrary/ -lSourceLibrary
INCLUDEPATH += $$PWD/../SourceLibrary
DEPENDPATH += $$PWD/../SourceLibrary
Это правильно связывается с использованием MINGW, поэтому меня не беспокоят опечатки в именах библиотек или определениях / объявлениях функций.
Изучив SourceLibrary в Dependencies, я заметил, что требуемые символы действительно не там.
Это заставило меня исследовать Makefile для SourceLibrary, однако файл с необходимыми символами, по-видимому, упоминался так же, как и другие файлы с символами.
I также проверил промежуточный файл .obj, который должен был содержать символы с dumpbin, и файл действительно имел их, и с тем же искажением, что и отчет об ошибке компоновщика.
Дальнейшее исследование с использованием dumpbin / ALL показало, что символы были в файле SourceLibrary.dll, что противоречило зависимостям, а также l как ошибка компоновщика.
Таким образом, я не понимаю, почему и компоновщик, и зависимости не видят символы, которые должны быть в библиотеке. Я подозреваю различия между компиляторами MSVC / MINGW, но, очевидно, на данный момент у меня есть только подозрения.