Развертывание приложения OSX, скомпилированного с использованием GCC 4.6 - PullRequest
4 голосов
/ 22 июня 2011

Я пытаюсь перенести мой проект на Mac OS-X.

Поскольку я разрабатывал свой проект с использованием C ++ 0X, мне потребовалась более свежая версия GCC, чем та, которая поставляется с Xcode (даже Xcode4), поэтому я скомпилировал GCC 4.6 на своем компьютере Snow Leopards Mac.

Мой проект компилируется нормально, и он запускается слишком на компьютере, который я скомпилировал (OS-X 10.6.7), но когда я его переношуна мой MacBook (OS-X 10.5.8) он не работает.

Возвращает следующие ошибки:

dyld: сбой привязки ленивых символов: символ не найден: __ZNSo9_M_insertImEERSoT_Ссылка:/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp Ожидается в: /usr/lib/libstdc++.6.dylib

Я понимаю, что программе требуется libstdc ++. 6.dylibGCC 4.6.0, поскольку этот файл содержит функции C ++ 0x (несмотря на то, что мойв текущем тесте не используется никакая функция C ++ 0x) вместо стандартной libstdc ++. 6.dylib, обычно включаемой в систему OS-X.

Итак, я попробовал следующее:

  • для указания -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min = 10,5 для обеспечения обратной совместимости с OS-X 10.5.Но ошибка остается прежней.

  • для проверки пути libstdc ++. 6.dylib с помощью otool -L и изменения пути к общей библиотеке с помощью install_name_tool -изменить /opt/local/lib/gcc46/libstdc++.6.dylib @executable_path /../ Libraries / libstdc ++. 6.dylib OgreApp (с копией gcc 4.6.0 libstdc ++. 6.dylib в библиотекахпапка) как предложено как ответ на мой предыдущий вопрос .Но ошибка остается той же.

  • для статической связи libstdc ++ и libgcc с использованием -static-libgcc - static-libstdc ++ .Но он по-прежнему возвращает ту же ошибку.

Поскольку моя программа использует инфраструктуру Ogre, я применил вышеупомянутые манипуляции к исполняемому файлу Ogre, встроенному в Ogre.framework, но это не такизменить что-либо.

Кто-нибудь может объяснить мне, как я должен развернуть приложение, созданное с помощью нестандартного libstdc ++, на другом компьютере Mac, на котором установлена ​​более старая версия (я думаю, что проблема с тем же компьютером работаетSnow Leopard в качестве программы использует GCC 4.6.0 libstdc ++)?

1 Ответ

0 голосов
/ 22 июня 2011

Mac OS X 10.5 не содержит совместимой копии стандартной библиотеки GCC. Если вы хотите, чтобы ваш код работал на Leopard, вам придется либо изменить его для компиляции под более старую версию GCC, либо вам ... ну, действительно, это ваш единственный вариант.

...