私のプロジェクトは 10.6SDK でコンパイルされ、展開ターゲットとして 10.5 が選択されています。10.5 leopard システムでバイナリを実行すると、
シンボルが見つかりません: __ZNKSt13bad_exception4whatEV
参照元: ...... 期待される場所: /usr/lib/libstdc++.6.dylib
時々前に同じ問題が発生し、解決策を作るためにブーストヘッダーを使用するために閉じましたが、それは一時的な解決策でした. なぜこれが起こるのですか?このシンボルが 10.5 システムにない場合、問題なくコンパイルされるのはなぜですか?
このシンボルを呼び出すライブラリを見つけることさえできません(おそらくブーストですが、どこですか?)
編集:
私は有罪を見つけました。thread.o コンパイル済みファイルは、__ZNKSt13bad_exception4whatEV このシンボルを呼び出します。ブースト ライブラリを 1.46 から 1.53 に更新しました。同じ問題が発生し、変更する前に:
#include <boost/thread.hpp>
に
#include <boost/thread/thread.hpp>
そして問題はなくなりました。ブーストを 1.53 に更新すると、これが再び呼び出されます。
macports または b2 でブーストをコンパイルしました。
otool -L bin.v2/libs/thread/build/darwin-4.2.1/release/address-model-32_64/macosx-version-min-10.4/macosx-version-10.8/threading-multi/libboost_thread.dylib
bin.v2/libs/thread/build/darwin-4.2.1/release/address-model-32_64/macosx-version-min-10.4/macosx-version-10.8/threading-multi/libboost_thread.dylib:
libboost_thread.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_system.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
まだ見え/usr/lib/libstdc++.6.dylib
ます。つまり、10.5 とは互換性がありません。
libstdc++ との静的リンクの解決策も探しましたが、見つかりませんでした。
私はまだそれに対する解決策を探しています。
編集2:
私はあきらめると思います。このばかげた状況にこれ以上時間はありません。Apple が 10.5 ヒョウ システム用に更新された libstdc++ を提供しない理由がわかりません。10.5 の libstdc++ には非常に多くの問題があります。
主な質問は、このバイナリが 10.5 システムと互換性がないことを Xcode が教えてくれなかった理由です。
Windows は、下位互換性に関してはるかに優れています。今では、xp sp3 用にコンパイルすることもできます。
Windows では常に静的リンクを使用しますが、Apple ではこれは不可能です。
この時点で、c++11 の機能を使用したい場合は、10.7 システム用にコンパイルする必要があることを知りました。10.6システムでもありません。しかし、プロフェッショナル オーディオでは、多くの人がまだ 10.6 システムを使用しています。Apple の非静的リンク状況または Apple の下位互換性アプローチのために、c++11 を使用するのを待たなければなりません。
はい、私は少し怒っています!