Подскажите по линковке: почему это... линкуется!
От: Basil2 Россия https://starostin.msk.ru
Дата: 02.03.21 10:07
Оценка:
Дано:

Библиотека zlib. Приходит в проект уже собранная, в виде .lib в статике.
Библиотека libarchive. Приходит в проект в исходниках, собираем ее сами, в статике. Линкуется с zlib.
Библиотека libpng. Приходит в проект в исходниках, собираем ее сами, в статике. Линкуется с zlib.

Далее:

Проект собирает экзешник. Если он линкуется только с zlib и с libarchive, то вылазит ошибка
archive_static.lib(archive_read_support_format_7zip.obj) : error LNK2019: unresolved external symbol __imp_inflate referenced in function decompress


Я даже знаю как ее устранить — достаточно определить переменную ZLIB_WINAPI при сборке libarchive, чтобы проставились корректные calling conventions.

Однако, вместо этого, экзешнику достаточно слинковаться с libpng, и тогда проблема линковки исчезает! Экзешник корректно генерируется и работает.

Вопрос:

Какого?? Почему это работает?

Ведь zlib одна и та же. Почему добавление в линковку соседнего проекта с zlib внезапно решает проблему с линковкой, тогда как просто добавление zlib не помогает? Как соседний проект чудесным образом лечит неправильные calling conventions??


P.S. Происходит на MSVC2015 и cmake 2.30. Причем на более старых cmake собирается нормально, даже без выставления ZLIB_WINAPI.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.