Russian Qt Forum
Ноябрь 24, 2024, 07:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Static library linking  (Прочитано 3401 раз)
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-файла.
« Последнее редактирование: Июль 20, 2010, 17:50 от alp » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Июль 20, 2010, 19:30 »

Попробовать объявить ее extern "C" (в хедере который используется для обоих)
Записан
Alp
Гость
« Ответ #2 : Июль 20, 2010, 19:36 »

Попробовать объявить ее extern "C" (в хедере который используется для обоих)
Попахивает шаманством.
Создал простейший тестовый проект, подключил эту либу, вызвал указанные "анрезолведы". Собралось и запустилось без проблем. Нее, тут дело в чем-то другом.
Записан
DmP
Гость
« Ответ #3 : Июль 21, 2010, 12:54 »

При линковке статических либ, важен их порядок подключения.
Записан
Alp
Гость
« Ответ #4 : Июль 21, 2010, 20:26 »

При линковке статических либ, важен их порядок подключения.
В чем важность этого порядка выражается? Есть либа1 и либа2, которые друг от друга не зависят никак, можно подключить одну, другую или обе. Так вот при всех трёх раскладах из либы1 не экспортируются имена нескольких функций.
Записан
DmP
Гость
« Ответ #5 : Июль 23, 2010, 12:28 »

Есть либа1 и либа2, которые друг от друга не зависят никак, можно подключить одну, другую или обе.
Ну тогда и не важен порядок.
Возможно проблема в заголовках, где то переопределяется функция или char. Можно попробовать включать заголовок с otf2fog_init первым/последним, посмотреть есть ли разница.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.106 секунд. Запросов: 22.