207 похожих чатов

Пересылаю сообщения из чата по Qt. Я так понимаю, проблема

вовсе не в нём, а в отсутствии RPATH под windows. Как заставить install(TARGETS mytarget RUNTIME_DEPENDENCIES) резолвить dll, которые найдены с помощью pkg-config?

16 ответов

64 просмотра

А как у вас вообще работает pkg_check под виндой? Mingw+msys? Чтоб оно работало надо либо как-то указать dll директорию при вызове функции, либо манипулировать path

Павел- Автор вопроса
Michael Chambers
А как у вас вообще работает pkg_check под виндой? ...

Установлен из chocolatey. Сам pkg-config находит нужные библиотеки и правильно устанавливает -L и -l флаги, приложение даже запускается из IDE. Но что я должен дальше сделать со своей стороны, чтобы эти dll зарезолвились, я не знаю. Потому что под linux so резолвятся без дополнительных манипуляций.

Павел
Установлен из chocolatey. Сам pkg-config находит н...

Могу предложить только руками звать get runtime dependencies и потом install files https://github.com/avm-energo/coma/blob/master/cmake/WinDeployDebug.cmake#L27-L56 например вот что-то такое

Павел- Автор вопроса
Michael Chambers
Могу предложить только руками звать get runtime de...

Спасибо! Похоже, чего-то вроде DIRECTORIES "$<TARGET_PROPERTY:AVM-Debug,LINK_DIRECTORIES>" у меня и не хватало. Если не найду какого-то идеального решения, то возьму это. Сейчас зацепился глазом за обсуждение RUNTIME_DEPENDENCY_SET. Выглядит, словно оно создано именно для решения этой задачи, но как этим пользоваться решительно невозможно понять)

Павел
Спасибо! Похоже, чего-то вроде DIRECTORIES "$<TARG...

Да, RUNTIME_DEPENDENCY_SET это именно оно, но работает вот поверх get runtime dependencies. Оно к сожалению не умеет деплоить dll, если dll является другим собираемым таргетом (и это не настраивается). То есть в целом всё делает правильно, но неудобно в некоторых случаях

Павел- Автор вопроса
Michael Chambers
Да, RUNTIME_DEPENDENCY_SET это именно оно, но рабо...

Но у меня интересующий таргет — это IMPORTED, если я правильно понимаю. В таком случае, мне он должен подойти?

Павел- Автор вопроса
Michael Chambers
Да, будет работать

Всё оказалось даже интереснее. Он сам по себе зарезолвить dll не может. Ему нужна подсказка в виде DIRECTORIES. Вот только я не знаю, где взять её. Среди всех свойств таргетов, которые достаются через TARGET_PROPERTY, единственный, который имеет осмысленное значение, это следующий: INTERFACE_LINK_LIBRARIES = C:/3rd/mylib/lib/libmylib.dll.a;z;m;stdc++ Как его с использовать с умом пока не знаю. Думаю, буду уже завтра копаться в этом дальше

Павел- Автор вопроса
Павел
Всё оказалось даже интереснее. Он сам по себе заре...

Всё же, решил сегодня: install(TARGETS mytarget RUNTIME_DEPENDENCIES PRE_INCLUDE_REGEXES "libmylib.dll|libmyotherlib.dll|..." PRE_EXCLUDE_REGEXES ".*" DIRECTORIES "${mylib_LIBRARY_DIRS}" ) Выглядит некрасиво, но похоже, что это лучшее решение, которое у меня получилось.

Павел- Автор вопроса
Michael Chambers
Плохое решение всё-таки

Имеется ввиду хардкод имён библиотек? Или подход в целом?

Павел
Имеется ввиду хардкод имён библиотек? Или подход в...

Хардкод имён библиотек конечно, не универсальное решение совсем

Павел- Автор вопроса
Michael Chambers
Хардкод имён библиотек конечно, не универсальное р...

Это понимаю. В идеале, я хотел правильные имена достать из импортированного таргета. Но в свойствах таргета есть информация лишь об одной dll из двух в пакете. Вторая линкуется транзитивно. Так что единственное, что можно сделать — пойти от обратного и исключить все нежелательные библиотеки. На свежую голову так и сделаю завтра. Большое спасибо за помощь!

🐻Alex Fails🦥🏔🍓 ︙
+, пока в смаке не допилено это (ещё) до конца

С 3.14 пилят... Сейчас конечно уже лучше, да и другие такого не умеют

Michael Chambers
С 3.14 пилят... Сейчас конечно уже лучше, да и дру...

Ну, я там делал ещё одно улучшение в эту тему, но не доделал, там часть идей они чуть получше где-то в 3.23 , что ли, втащили

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта