Russian Qt Forum

Программирование => С/C++ => Тема начата: Alp от Июль 20, 2010, 17:44



Название: Static library linking
Отправлено: Alp от Июль 20, 2010, 17:44
Есть у меня библиотека, написанная плохо, криво, но она работает. И есть софт который её использует. Однако спонтанно эта либа перестает линковаться с детскими ошибками вроде:
Код
C++ (Qt)
error LNK2019: unresolved external symbol "void __cdecl otf2fog_init(char const *)" (?otf2fog_init@@YAXPBD@Z) referenced in function "public: __thiscall FontOpener::FontOpener(char const *)" (??0FontOpener@@QAE@PBD@Z) FontOpenerT.obj
Дело происходит под 2008 студией.
Вызываемая функция разумеется есть, добавлена в проект и вообще существует.
Сигнатуры в порядке (в хедэре и cpp-файле соответствуют).
Генерация кода для либы и для приложения одинаковая (/MTd).
Соглашения о вызовах для приложения и либы одинаковы (стоят по-умолчанию _cdecl). Отдельно в либе квалификатор вызова не указывал (UPD: Указал - положение дел не изменилось)

Какие еще есть идеи почему может падать на линковке?

//Создать новый проект нельзя - много файлов в нем и к тому же он сделан генератором из pro-файла.


Название: Re: Static library linking
Отправлено: Igors от Июль 20, 2010, 19:30
Попробовать объявить ее extern "C" (в хедере который используется для обоих)


Название: Re: Static library linking
Отправлено: Alp от Июль 20, 2010, 19:36
Попробовать объявить ее extern "C" (в хедере который используется для обоих)
Попахивает шаманством.
Создал простейший тестовый проект, подключил эту либу, вызвал указанные "анрезолведы". Собралось и запустилось без проблем. Нее, тут дело в чем-то другом.


Название: Re: Static library linking
Отправлено: DmP от Июль 21, 2010, 12:54
При линковке статических либ, важен их порядок подключения.


Название: Re: Static library linking
Отправлено: Alp от Июль 21, 2010, 20:26
При линковке статических либ, важен их порядок подключения.
В чем важность этого порядка выражается? Есть либа1 и либа2, которые друг от друга не зависят никак, можно подключить одну, другую или обе. Так вот при всех трёх раскладах из либы1 не экспортируются имена нескольких функций.


Название: Re: Static library linking
Отправлено: DmP от Июль 23, 2010, 12:28
Есть либа1 и либа2, которые друг от друга не зависят никак, можно подключить одну, другую или обе.
Ну тогда и не важен порядок.
Возможно проблема в заголовках, где то переопределяется функция или char. Можно попробовать включать заголовок с otf2fog_init первым/последним, посмотреть есть ли разница.