Запуск приложений против другого SDK в OS X? - PullRequest
6 голосов
/ 04 октября 2010

Сводка

Я хочу запустить кросс-скомпилированное приложение для библиотек 10.5.Есть ли переменная окружения, которая позволяет этому работать?

Более длинная версия

Я кросс-скомпилировал свое приложение OS X C ++ для цели 10.5 на хосте 10.6.Компилируется нормально.Скомпилированное приложение связано с библиотеками типа /usr/lib/libstdc++.6.dylib.Когда я запускаю его в своей системе, он использует версию библиотек 'host', которая составляет 10.6.Я хотел бы проверить его на версии 10.5, которые содержатся в каталоге `/Developer/SDKs/MacOSX10.5.sdk.Как мне это сделать?

Я пробовал разные варианты DYLD_LIBRARY_PATH, DYLD_ROOT_PATH и т. Д., Как описано в руководстве , но мне не удалось заставить его работать.

Ответы [ 3 ]

3 голосов
/ 11 ноября 2010

Используйте install_name_tool, чтобы изменить путь.Возможно, вам не удастся сжать более длинный путь, если компоновщик не добавил заполнение, но вместо этого вы можете использовать rpath.Например, я изменил путь загрузки приложения в моей системе, чтобы использовать 10.5 SDK, выполнив:

install_name_tool -change /usr/lib/libstdc++.6.dylib @rpath/libstdc++.6.dylib /path/to/executable
install_name_tool -add_rpath /Developer/SDKs/MacOSX10.5.sdk/usr/lib /path/to/executable

, и после этого он работал нормально.Я бы не хотел давать никаких заверений, но если исходно скомпилировать против SDK 10.5, у вас есть шанс.

Если вам нужно увидеть пути, которые использует исполняемый файл, otool -L выведет списоким.

0 голосов
/ 11 ноября 2010

Попробуйте это:

  1. Откройте ваш проект в Xcode.
  2. В разделе Исполняемые файлы в столбце Группы и файлы щелкните правой кнопкой мыши исполняемый файл приложения и выберите Получить информацию
  3. . Выберите вкладку Аргументы
  4. В нижней половине окна:в разделе «Переменные для установки в среде:» нажмите кнопку +.
  5. В строке, которая отображается в таблице, введите DYLD_LIBRARY_PATH в поле Имя и введите путь (например, / Developer / SDKs / MacOSX10.5.sdk / usr / lib) в поле Value.

Теперь у вас настроена переменная окружения пути ссылки.Эта переменная окружения будет установлена ​​для вас, когда вы запустите этот исполняемый файл из Xcode.Чтобы протестировать ваше приложение, просто зайдите в меню «Выполнить» и выберите «Выполнить».Если вы запустите приложение, дважды щелкнув его прямо в Finder, вы не получите эту переменную окружения.Настройка вступает в силу только при запуске из Xcode.

Вот документация Apple по этому процессу:

http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/XcodeProjectManagement/230-Defining_Executable_Environments/executable_environments.html

0 голосов
/ 11 ноября 2010

Вряд ли это возможно, учитывая, что OS X не имеет стабильного ядра ABI. Вместо этого стабильный ABI - это тот, который предоставляется системными библиотеками. Поэтому использование системных библиотек другой версии, чем у ядра, может привести к поломке. (Я не знаю, в какой степени это ломается.)

См. http://developer.apple.com/library/mac/#qa/qa2001/qa1118.html

...