MaxOS-XでC++0xとOgreを使用してC++プロジェクトを移植しようとしていますが、OS-Xバージョン間で移植性の問題が発生します。
GCC4.6.0を使用してMacOS-X10.6(Snow Leopard)でプロジェクトをコンパイルすることに成功しました(C ++ 0xが必要だったため)。大変でしたが(おそらく私が新しいOSXユーザーだったため)、最終的にエラーなしでコンパイルされました。
必要なすべてのコンポーネント、フレームワーク、プラグインなどをApplication.appバンドルに含めましたが、このMacOS-X10.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
- コンポーネント
- ... (鬼のコンポーネント)
- フレームワーク
- Ogre.framework
- マックOS
- MyProject (実行可能)
- プラグイン
- ... (Ogreプラグイン)
- 資力
- ... (Ogre .cfg +私のアセット)
私はCmakeにMacOSX10.5.sdkを使用するように指示しました(CMakeList.txt内ではなくCmake GUI内で設定):
- CMAKE_OSX_DEPLOYEMENT_TARGET 10.5
- CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk
しかし、それは何も変わらないようです...
libstdc ++。dylibファイルは、アプリケーションのコンパイルに使用されるMacのlibstdc ++。6.0.9.dylibにリンクしますが、移植性のテストに使用されるMacのlibstdc++。6.0.4.dylibにリンクします。
しかし、MacOSX10.5.sdkを使用するように指示したので、コンパイル時にlibstdc ++。6.0.4.dylibを使用するので、10.5がインストールされたMacで実行できます。
実際の目標は、何も変更せずに2番目のMac(および10.5以降を使用するすべてのMac)で実行できるようにすることです。ダウンロードして実行するだけです...
誰かが私がここで欠けているものを教えてくれますか?(私はOS-Xの方法と構成に精通しているとは感じていないので、非常に基本的なものを見逃していた可能性があります。粗雑になることを恐れないでください^^)。
CmakeでターゲットSDKを指定するにはどうすればよいですか?(使用されているCmakeコマンドは十分ではありませんか?)
私はプロジェクトをコンパイルするために以下を使用します:
- Mac OS-X 10.6.7
- GCC 4.6.0
- Cmake 2.8-4
- Ogre 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#
明らかに、gcc46 libstdc ++。6.dylibにリンクしています(このファイルにはGCC4.6.0のC++ 0x関数が含まれていると思うのでおそらく正常です)。
それで、解決策はありますか?(-staticは、動的が必要であることを示すエラーを返します...)