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

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

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

16 ответов

10 просмотров

А как у вас вообще работает 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 из двух в пакете. Вторая линкуется транзитивно. Так что единственное, что можно сделать — пойти от обратного и исключить все нежелательные библиотеки. На свежую голову так и сделаю завтра. Большое спасибо за помощь!

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

+, пока в смаке не допилено это (ещё) до конца

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

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

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

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

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape в Python? Из доки: » Escape all the characters in pattern except ASCII letters and n...
Daniil Smolyakov
9
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта