Russian Qt Forum

Компиляторы и платформы => Mac OS X => Тема начата: mezmay от Июнь 16, 2015, 09:29



Название: [Решено]Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 16, 2015, 09:29
Mac OS X Yosemite. Первый раз сел на Мак.
Переношу с винды проект на Qt Creator, использующий Intel IPP. Не запускается. После долгого гугления думаю что дело в каком-то новом замуте Mac OS с путями поиска библиотек, начавшевшемся с Maverics.

Описание:
Qt Creator, Intel IPP 2015.
Пытаюсь запустить проект в Qt Creator, получаю ошибку:

Цитировать
dyld: Library not loaded: ./libipps-8.2.dylib Referenced from:
/my_path/my_app.app/Contents/MacOS/my_app
Reason: image not found

Путь к динамическим библиотекам IPP прописан в .pro файле:
Цитировать
LIBS += -L/opt/intel/ipp/lib/ -lipps -lippcore

Также я добавлял этот путь в переменные среды DYLD_LIBRARY_PATH и DYLD_FALLBACK_LIBRARY_PATH, но это не помогло.

Темы где может быть зацепка:
https://www.exelisvis.com/Support/Forums/tabid/184/forumid/7/threadid/15908/scope/posts/threadpage/1/Default.aspx
http://www.cyberforum.ru/qt/thread1275600.html


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 16, 2015, 17:41
А зачем эти все пути - заливайте все в bundle, тогда можно просто копировать на др машину.


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 17, 2015, 09:10
А из среды как запустить?


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 17, 2015, 10:24
А из среды как запустить?
Не знаю, я всегда делаю "полное" приложение со всеми нужными либами в bundle, оно запускается хоть из IDE хоть как.

Вообще сделано очень удобно, особенно по сравнению с Вындоуз. Каждая dylib содержит путь откуда она сама может грузиться и пути где искать свои dylib. Это можно посмотреть (otool -L <имя dylib>) и изменить (см. change_install_name). Копируете все нужные dylib куда-нибудь, напр в фолдер Libs. Меняете в копиях все пути на @executable_path. В конце билда ставите скрипт который копирует содержимое Libs в /Content/MacOS. Это все делается один раз


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Авварон от Июнь 17, 2015, 10:34
@executable_path

@rpath


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: kuzulis от Июнь 17, 2015, 10:41
Цитировать
А из среды как запустить?

Если имеется ввиду из QtCreator - то очень просто: в свойствах проекта, там где Project->Build(Run)-> Build (Run) Environment нужно создать новую переменную типа DYLD_LIBRARY_PATH (или как там оно в маке) и установить ей значение "opt/intel/ipp/lib/".

Там вроде-как надо делать это в Build Environment и убедиться что в Run Environment эта переменная тоже появилась (она должна автоматом подхватиться туда).
Но если ее там (в Run) нет - то скопипастить.

На этом все - можно запускать проект!

Цитировать
Также я добавлял этот путь в переменные среды DYLD_LIBRARY_PATH и DYLD_FALLBACK_LIBRARY_PATH, но это не помогло.

Не может быть! (упс, не дочитал до этого)   :)



Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 17, 2015, 10:50
Не может быть! (упс, не дочитал до этого)   :)
https://stackoverflow.com/questions/30872420/cannot-set-custom-path-for-qt-creator-on-os-x-10-10


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 17, 2015, 11:35
@rpath
А что оно делает? Ищет сначала в @executable_path, потом в @loader_path (удобно чтобы не чикаться с плагинами). Или где-то еще или как? Спасибо


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: kuzulis от Июнь 17, 2015, 11:36
Не может быть! (упс, не дочитал до этого)   :)
https://stackoverflow.com/questions/30872420/cannot-set-custom-path-for-qt-creator-on-os-x-10-10

Хм.. у меня работала установка DYLD_LIBRARY_PATH.


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 17, 2015, 13:03
Вообще сделано очень удобно, особенно по сравнению с Вындоуз. Каждая dylib содержит путь откуда она сама может грузиться и пути где искать свои dylib. Это можно посмотреть (otool -L <имя dylib>) и изменить (см. change_install_name). Копируете все нужные dylib куда-нибудь, напр в фолдер Libs. Меняете в копиях все пути на @executable_path. В конце билда ставите скрипт который копирует содержимое Libs в /Content/MacOS. Это все делается один раз
@executable_path ведет в /Content/MacOS, или надо ставить /@executable_path/Content/MacOS ?

И если мне надо будет из программы запускать другой app-ник (из командной строки), его тоже в /Content/MacOS ?


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 17, 2015, 13:33
@executable_path ведет в /Content/MacOS, или надо ставить /@executable_path/Content/MacOS ?

И если мне надо будет из программы запускать другой app-ник (из командной строки), его тоже в /Content/MacOS ?
Пример: Вы подключили к проекту какой-то dylib. Линкер полез в этот dylib, выцепил "собственный путь" этой либы (то что otool покажет первой строкой) и этот путь вписал в Ваш исполняемый файл. Путь может и не совпадать с тем где dylib сейчас. Приложение запустилось, ищет dylib по этому пути. Найдя проверяет "собственный" путь (что вписан в ней самой). Ага - совпадают, все, грузим.

Наберите 
Цитировать
otool -L <имя dylib>
и скопируйте сюда выхлоп, так будет проше


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Авварон от Июнь 17, 2015, 15:29
@rpath
А что оно делает? Ищет сначала в @executable_path, потом в @loader_path (удобно чтобы не чикаться с плагинами). Или где-то еще или как? Спасибо

В линухах рпатх ищет в списке путей, прописанных в бинарь. @executable_path ищет только в одном (жестко зашитом) пути


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 18, 2015, 09:43
Вчера добавил в креаторе в переменную PATH (не DYLIB_LIBRARY_PATH) путь /opt/intel/ipp/lib. Заработал запуск из Creator'a. Повторюсь, мне надо запускать именно из него для отладки. Но потом решил поменять длинную часть пути а-ля /build-untitled-Desktop_Qt_5_4_2_clang_OpenGL_64bit-Debug на просто /Debug. Везде поменял, все компилится куда надо. Но перестало запускаться из под среды с той же ошибкой что и в первом посте.
Возвращаться к предыдущей версии уже нервов не хватило, сегодня буду пробовать.


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 18, 2015, 11:07
И otool -L от моего исполняемого файла выдает:

Цитировать
./libipps-8.2.dylib
./libippcore-8.2.dylib
почему он тогда не запускается при лежащих в /Contents/MacOS/ (а также рядом с .app) библиотеках ?:

Цитировать
dyld: Library not loaded: ./libipps-8.2.dylib
...


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 18, 2015, 11:51
И otool -L от моего исполняемого файла выдает:

Цитировать
./libipps-8.2.dylib
./libippcore-8.2.dylib
почему он тогда не запускается при лежащих в /Contents/MacOS/ (а также рядом с .app) библиотеках ?:
Не знаю, должен. Наберите
Цитировать
export PRINT_DYLD_LIBRARIES=1
, в консоли будут печататься все загружаемые либы. Оно Вам надо разбираться где там текущий путь? Вы хотите держать эту либу напр в  /opt/intel/ipp/lib, ну и пропишите этот путь в самой dylib и перелинкуйте. И будет грузить оттуда без разницы из среды или как


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 18, 2015, 12:29
Честно говоря не понял. Не для исполняемого файла прописывать, а для dylib?


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: kuzulis от Июнь 18, 2015, 13:57
А если сам креатор запускать с DYLD_LIBRARY_PATH (и прочими, через скрипт, например)?

Например, сначала попытаться запустить свое приложение из консольки, установив нужное окружение и прописав все что нужно..
А потом уже, зная нужные "настройки" добавить их в скрипт для запуска креатора..


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 18, 2015, 14:32
Честно говоря не понял. Не для исполняемого файла прописывать, а для dylib?
Да, с помощью install_name_tool, а исполняемый перелинковать (чтобы он измененный путь подхватил)


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 22, 2015, 19:04
Проблема запустить без среды - по значку.
Если просто пытаться запустить, ошибка
Цитировать
dyld: Library not loaded: ./libipps-8.2.dylib
.

Попробовал воспользоваться ./macdeployqt /path_to_my_app/my.app :
Цитировать
ERROR: no file at "/./libipps-8.2.dylib"
ERROR: no file at "/./libippcore-8.2.dylib"

otool -L my :
Цитировать
./libipps-8.2.dylib
./libippcore-8.2.dylib
...
...

Поменял пути:
Цитировать
install_name_tool -change ./libipps-8.2.dylib /opt/intel/ipp/lib/libipps-8.2.dylib my
install_name_tool -change ./libippcore-8.2.dylib /opt/intel/ipp/lib/libippcore-8.2.dylib my
и сделал еще раз макдеплой

Теперь:
При запуске:

Цитировать
dyld error message:
Library not loaded: ./libippcore-8.2.dylib
Referenced from:  /my_path/my.app/Contents/Frameworks/libipps-8.2.dylib
Reason: image not found
(сейчас обе эти библиотеки лежат во /Frameworks, макдеплой их туда положил)

и наконец отул от libipps из Frameworks:
Цитировать
otool -L libipps-8.2.dylib
libipps-8.2.dylib:
   @executable_path/../Frameworks/libipps-8.2.dylib (compatibility version 8.2.0, current version 8.2.0)
   ./libippcore-8.2.dylib (compatibility version 8.2.0, current version 8.2.0)
   /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

Что делать?


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 23, 2015, 07:44
Что делать?
Запакуйте bundle в zip и выложите сюда (если надо отключите код, оставьте ссылки на dylib)


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 23, 2015, 19:15
Сам bundle:
https://yadi.sk/d/vkgUmgqThRxrj
кроме того для запуска понадобится Jack Audio Connection Kit:
https://yadi.sk/d/soM__RrqhRyDR

На данный момент вижу что проблема в том, что libippcore в свою очередь зависит от других динамических библиотек Intel IPP, которых всего 900 МБ в /opt/intel/ipp/lib/ . Их много и какая-то точно грузит зависимости в райнтайме.

Дистрибутив Intel IPP:
https://yadi.sk/d/cUQkmsPnhS2MK


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 24, 2015, 12:04
Дистрибутив Intel IPP:
https://yadi.sk/d/cUQkmsPnhS2MK
Ммм... он требует активации  :) Скиньте сначала те 2 либы, может этого будет достаточно. Хотя я бы совсем не отказался и от активации т.к. юзаю icc. Есть возможность - стукните в личку, ну а нет - так нет. Спасибо

На данный момент вижу что проблема в том, что libippcore в свою очередь зависит от других динамических библиотек Intel IPP, которых всего 900 МБ в /opt/intel/ipp/lib/ . Их много и какая-то точно грузит зависимости в райнтайме.
PRINT_DYLD_LIBRARIES напечатает всю последовательность загрузки


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 24, 2015, 21:35
Эти две библиотеки: https://yadi.sk/d/qG4eCeOEhTW3S
Все библиотеки: https://yadi.sk/d/J7uzEq9xhTWDg
в личку отписал


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 25, 2015, 08:32
Залил 2 либы в MacOS и вправил все пути. Здесь (http://www.4shared.com/zip/7uc9_b-kce/jk2.html)
К сожалению, на этом дело не кончается, получаю
Цитировать
Error at loading of ippSP library: No shared libraries were found in the Waterfall procedure
Видимо она в рантайме ищет еще либы. Чтобы сделать приложение без зависимостей

1) Устанавливаете LD_LIBRARY_PATH как написано здесь (https://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-error-no-dll-was-found)

2) Включаете export PRINT_DYLD_LIBRARIES=1 толкаете в терминале и смотрите что она грузит. Потом тем же макаром заливаете это в MacOS.


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 28, 2015, 12:51
Проблема в том что какая-то из этих библиотек (libipps или libippcore) грузит свои зависимости в рантайме.
Надо как-то задать этим библиотеками rpath (rpath - это список путей поиска библиотек для рантайма).


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 28, 2015, 15:31
Проблема в том что какая-то из этих библиотек (libipps или libippcore) грузит свои зависимости в рантайме.
Надо как-то задать этим библиотеками rpath (rpath - это список путей поиска библиотек для рантайма).
Попробуйте как написано в ссылке выше
Цитировать
export LD_LIBRARY_PATH=/opt/intel/ipp/X.X/ia32/sharedlib:$LD_LIBRARY_PATH
Или выложите эти либы - я попробую


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 28, 2015, 17:55
Задавать DYLD_LIBRARY_PATH я пробовал, работает, но только для запуска из терминала
либы все здесь: https://yadi.sk/d/J7uzEq9xhTWDg


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 29, 2015, 08:36
Задавать DYLD_LIBRARY_PATH я пробовал, работает, но только для запуска из терминала
либы все здесь: https://yadi.sk/d/J7uzEq9xhTWDg
Похоже что не все. Вот я устанавливаю DYLD_LIBRARY_PATH на скачанные либы и включаю печать (export PRINT_DYLD_LIBRARIES=1). Вывод
Цитировать
...
dyld: loaded: /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
dyld: loaded: /Users/igorigor/Desktop/DYLD/lib/libippsu8-8.2.dylib
dyld: unloaded: /Users/igorigor/Desktop/DYLD/lib/libippsu8-8.2.dylib
dyld: loaded: /Users/igorigor/Desktop/DYLD/lib/libippsm7-8.2.dylib
dyld: unloaded: /Users/igorigor/Desktop/DYLD/lib/libippsm7-8.2.dylib
dyld: loaded: /Users/igorigor/Desktop/DYLD/lib/libippsmx-8.2.dylib
dyld: unloaded: /Users/igorigor/Desktop/DYLD/lib/libippsmx-8.2.dylib
Error at loading of ippSP library: No shared libraries were found in the Waterfall procedure

Edit: нет, либы все - нужно было добавить libippsu8-8.2.dylib. Ну вот у меня и запустилось, начинает вякать "Файл частотных полос не найден". Вот бандл с прописаными либами (http://www.4shared.com/zip/J2M8jywTba/jk_June29.html). У Вас пошло?


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 29, 2015, 09:29
Да, запускается! В чем фишка? Просто добавить libippsu c прописанными в ней самой путями к самой себе и libippcore?
А для запуска окна программы надо запустить JackPilot и в нем нажать start.


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: Igors от Июнь 29, 2015, 10:04
Да, запускается! В чем фишка? Просто добавить libippsu c прописанными в нем самом путями к самому себе и libippcore? И как добились отображения в PRINT_DYLD_LIBRARIES этих библиотек?
Посмотрите (otool -L) все либы долитые в MacOS. В них все (и собственный id и все на что ссылается) тупо прописано на @executable_path, т.е. приложение без зависимостей. DYLD_LIBRARY_PATH не волнует.

Теперь, чтобы не возиться всякий раз, просто копируете все эти прописанные либы из MacOS куда-нибудь и линкуете оттуда. И добавляете "post build phase" (или как называется в вашей IDE) который скопирует их оттуда в MacOS. И все, у Вас сразу собирается приложение без зависимостей которое запускается как угодно и не требует никаких "переменных окружения"


Название: Re: Mac OS X: не могу запустить проект, ошибка с DYLD
Отправлено: mezmay от Июнь 29, 2015, 23:13
Да, все работает и на виртуалках и на "боевом" макбуке. Спасибо! Пометил тему как "решено".