4

私のプロジェクトを Mac OS-X に移植しようとしています。

C++0X を使用してプロジェクトを開発したとき、Xcode で提供されているもの (Xcode4 でさえ) よりも新しいバージョンの GCC が必要だったので、Snow Leopards Mac で GCC 4.6 をコンパイルしました。

私のプロジェクトは正常にコンパイルされ、コンパイルしたコンピューター (OS-X 10.6.7) でも起動しますが、MacBook (OS-X 10.5.8) に転送すると機能しません。

次のエラーが返されます。

dyld: 遅延シンボル バインドに失敗しました: シンボルが見つかりません: __ZNSo9_M_insertImEERSoT_ 参照元: /Users/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp

dyld: シンボルが見つかりません: __ZNSo9_M_insertImEERSoT_ 参照元: /Users/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp 予期される場所: /usr/lib/libstdc++.6.dylib

プログラムには GCC 4.6.0 の libstdc++.6.dylib が必要であることを理解しています。標準の libstdc++.6.dylib は、通常 OS-X システムに含まれています。

だから私は次のことを試しました:

  • -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5を指定して、OS-X 10.5 との下位互換性を確保します。しかし、エラーは同じままです。

  • otool -Lを使用して libstdc++.6.dylib パスを確認し、install_name_tool -change /opt/local/lib/gcc46/libstdc++.6.dylib @executable_path/../Libraries/libstdc++.6.dylibを使用して共有ライブラリ パスを変更します。 OgreApp (Libraries フォルダーに gcc 4.6.0 libstdc++.6.dylib のコピーを含む)は、以前の質問の回答として提案されています。しかし、エラーは同じままです。

  • -static-libgcc - static-libstdc++を使用して libstdc++ と libgcc を静的にリンクします。しかし、それでも同じエラーが返されます。

私のプログラムは Ogre フレームワークを使用しているため、上記の操作を Ogre.framework に埋め込まれた Ogre 実行可能ファイルにも適用しましたが、何も変わりません。

非標準のlibstdc ++で作成されたアプリケーションを、古いバージョンがインストールされた別のMacコンピューターに展開する方法を誰かが説明できますか(プログラムがGCC 4.6を使用するため、Snow Leopardを実行しているコンピューターでも問題は同じだと思います) .0 libstdc++) ?

4

1 に答える 1

0

Mac OS X 10.5 には、互換性のある GCC 標準ライブラリのコピーが含まれていません。コードを Leopard で実行したい場合は、古いバージョンの GCC でコンパイルするようにコードを変更するか、そうする必要があります...まあ、それが唯一の選択肢です。

于 2011-06-22T17:35:58.423 に答える