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

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

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

16 ответов

59 просмотров

А как у вас вообще работает 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 , что ли, втащили

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта