Я пытаюсь портировать проект C ++ с использованием C ++ 0x и Ogre на Max OS-X, и я сталкиваюсь с проблемой переносимости между версиями OS-X.
Мне удалось скомпилировать мой проект на MacOS-X 10.6 (Snow Leopard) с использованием GCC 4.6.0 (потому что мне нужен C ++ 0x).Это было сложно (вероятно, потому что я новый пользователь OSX), но наконец скомпилировало его без ошибок.
Я включил все необходимые компоненты, фреймворки, плагины и т. Д., Необходимые в комплект Application.app, и он отлично запускаетсяна этом Mac OS-X 10.6
Но при переносе проекта на мой старый ноутбук, установленный с Mac OS-X 10.5.8, я не могу запустить приложение.
Если я дваждыщелкните по .app, попробуйте запустить и, наконец, значок исчезнет из строки меню, и все.Но если я запускаю исполняемый файл, включенный в .app напрямую, он возвращает следующие ошибки:
MacBook-2:~ root# /var/root/Desktop/MyProject.app/Contents/MacOS/MyProject ; exit;
dyld: lazy symbol binding failed: Symbol not found: __ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
Referenced from: /var/root/Desktop/MyProject.app/Contents/MacOS/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre
Expected in: /usr/lib/libstdc++.6.dylib
dyld: Symbol not found: __ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
Referenced from: /var/root/Desktop/MyProject.app/Contents/MacOS/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre
Expected in: /usr/lib/libstdc++.6.dylib
Trace/BPT trap
logout
Вот представление дерева комплекта приложений.
MyProject.app
- Компоненты
- Каркасы
- MacOS
- Плагины
- Ресурсы
- ... (Ogre .cfg + myassets)
Я сказал Cmake использовать MacOSX10.5.sdk, используя (устанавливается внутри графического интерфейса Cmake, а не внутри CMakeList.txt):
- CMAKE_OSX_DEPLOYEMENT_TARGET 10.5
- CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk
Но это, похоже, ничего не меняет ...
Файл libstdc ++. Dylib, ссылки на libstdc ++. 6.0.9.dylib на Mac usРедактировать, чтобы скомпилировать приложение, в то время как оно ссылается на libstdc ++. 6.0.4.dylib на Mac, который использовался для проверки переносимости.
Но, как я уже сказал, для использования MacOSX10.5.sdk я подумал, что он будет использовать libstdc ++.6.0.4.dylib во время компиляции, чтобы он мог работать на Mac, установленном с 10.5
Действительно, цель состоит в том, чтобы заставить его работать на втором Mac (и на всех Mac, использующих 10.5+), не меняя ничего наЭто.Просто скачайте и запустите ...
Кто-нибудь может сказать мне, что мне здесь не хватает? (Я не очень хорошо разбираюсь в методах и организации OS-X, поэтому я могпропустил что-то очень простое, не бойтесь быть грубым ^^).
Как указать целевой SDK в Cmake? (недостаточно ли используемых команд Cmake?)
Я использую следующее для компиляции моего проекта:
- Mac OS-X 10.6.7
- GCC 4.6.0
- Cmake2.8-4
- Огр 1.7.3
Для тестирования проекта я использую следующее:
- Mac OS-X 10.5.8 (естьустановлены некоторые инструменты разработки. Я думаю, что должен сказать об этом, на случай, если это может помешать работе приложений).
Редактировать:
Как я обнаружил, otool здесь - это возвращенный журнал
Valkeas-Mac:MacOS root# otool -L MyProject
MyProject:
@executable_path/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre (compatibility version 0.0.0, current version 1.7.3)
@executable_path/../Components/libOgreTerrain.dylib (compatibility version 0.0.0, current version 1.7.3)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 136.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/opt/local/lib/gcc46/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.15.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/gcc46/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.19.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.54.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 34.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.26.0)
Valkeas-Mac:MacOS root#
Очевидно, что он ссылается на gcc46libstdc ++. 6.dylib (вероятно, нормально, так как я предполагаю, что этот файл содержит функции C ++ 0x GCC 4.6.0).
Так есть ли какое-нибудь решение?(-static возвращает ошибку, которая говорит, что мне нужна динамическая ...)