Mac .app Сбой при вызове функции сторонней библиотеки на Lion.Но работает при запуске из .app / Contents / MacOs / исполняемого файла - PullRequest
1 голос
/ 26 марта 2012

Я пытаюсь запустить наше приложение на Mac Lion.Приложение построено на Snow Leopard 10.6.8, упаковано с помощью Package Maker.Мы динамически подключаемся к libCurl (сторонняя библиотека lib).На снежном барсе это работает.На Lion, когда я устанавливаю и щелкаю значок приложения, происходит сбой при вызове curl_easy_perform (из libCurl).Но когда я щелкаю правой кнопкой мыши значок приложения, нажимаю Показать содержимое пакета и перехожу /Applications/MyDir/OurApp.app/Contents/MacOS/OurApp, а затем пытаюсь запустить этот исполняемый файл Unix, тогда он работает.Я использовал otool для проверки путей к lib, и все они кажутся правильными.

Может кто-нибудь помочь мне, почему он не работает, когда я нажимаю .app?Я думал, что .app - это мягкая ссылка на основной исполняемый файл.так что если исполняемый файл работает, то .app также должен работать.

Нужно ли указывать путь к библиотеке в .app?если да, то как?

1 Ответ

0 голосов
/ 25 июня 2012

Динамический компоновщик "dyld" и связанные с ним программы, такие как "otool", зависят от переменных среды.Переменные среды могут варьироваться в зависимости от процесса: Finder имеет уникальную копию настроек переменных среды, как и каждая оболочка в окне терминала.

Как вы можете видеть, если вы запускаете "man dyld", существует много переменныхэто может повлиять на поведение этих программ.

Если вы видите в командной строке другое поведение, чем в Finder, я думаю, что в вашем терминале установлена ​​хотя бы одна из специальных переменных компоновщика.Вероятно, он дает указание компоновщику искать в тех местах библиотеки, которые отличаются от значений по умолчанию для компоновщика (или того, что использует Finder).

Вы можете запустить «env | sort» из своего терминала, чтобы увидеть, что было установлено.

...