Подскажите по линковке: почему это... линкуется!
От: 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 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re: Подскажите по линковке: почему это... линкуется!
От: niXman Ниоткуда https://github.com/niXman
Дата: 02.03.21 10:11
Оценка:
статические либы со статическими либами не линкуются
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: Подскажите по линковке: почему это... линкуется!
От: Basil2 Россия https://starostin.msk.ru
Дата: 02.03.21 10:37
Оценка:
Здравствуйте, niXman, Вы писали:

X>статические либы со статическими либами не линкуются


Это понятно. Но в зависимостях статической либы вполне допустимо указывать другие статические либы, а линкуется в итоге экзешник.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[3]: Подскажите по линковке: почему это... линкуется!
От: niXman Ниоткуда https://github.com/niXman
Дата: 02.03.21 10:38
Оценка:
Здравствуйте, Basil2, Вы писали:

B> ... в зависимостях статической либы вполне допустимо указывать другие статические либы ...


зачем? в чем смысл?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Подскажите по линковке: почему это... линкуется!
От: niXman Ниоткуда https://github.com/niXman
Дата: 02.03.21 10:41
Оценка: 11 (2) +2
Здравствуйте, Basil2, Вы писали:

B>error LNK2019: unresolved external symbol __imp_inflate referenced in function decompress


по сабжу же: эта ошибка говорит о том, что `archive_static.lib` почему-то ожидает символ `__imp_inflate` из библиотеки импорта для dll, а не из статической либы.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: Подскажите по линковке: почему это... линкуется!
От: niXman Ниоткуда https://github.com/niXman
Дата: 02.03.21 10:44
Оценка:
Здравствуйте, niXman, Вы писали:

X>статические либы со статическими либами не линкуются


правильней будет так: статические либы вообще не линкуются, поэтому им не нужны другие либы в зависимостях.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[4]: Подскажите по линковке: почему это... линкуется!
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 02.03.21 13:47
Оценка:
Здравствуйте, niXman, Вы писали:

B>> ... в зависимостях статической либы вполне допустимо указывать другие статические либы ...


X>зачем? в чем смысл?


Сколько Вы видели статических библиотек, которые можно подключить к своему проекту и собрать с /nodefaultlib, не указывая явно никаких других .lib?
Re[5]: Подскажите по линковке: почему это... линкуется!
От: niXman Ниоткуда https://github.com/niXman
Дата: 02.03.21 13:49
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Сколько Вы видели статических библиотек, которые можно подключить к своему проекту и собрать с /nodefaultlib, не указывая явно никаких других .lib?


как это относится к моему вопросу?
и, что общего у "этого" и моего вопроса?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: Подскажите по линковке: почему это... линкуется!
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 03.03.21 03:15
Оценка:
Здравствуйте, niXman, Вы писали:

X>как это относится к моему вопросу?

X>и, что общего у "этого" и моего вопроса?

Это ответ-намек на вопрос "зачем? в чем смысл?" (который был репликой на "зависимостях статической либы вполне допустимо указывать другие статические либы").
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.