14

前にここで参照したよう___sincos_stretに、Xcode5 コマンド ライン ツールを使用してこのシンボルを使用するプロジェクトをコンパイルするときに見つかりません。

上記の参照スレッドでは、IOS ターゲット (-miphoneos-version-min=5.0コンパイラに渡す) のソリューションが投稿されていますが、デスクトップ ( x64) ターゲットのソリューションはありますか?

たとえば、ポリコードをコンパイルしようとすると発生します

編集2:

不思議なことに、前のエラーで参照されているライブラリを手動でコンパイルした後、エラーは内部 llvm ヘッダー自体であるlto.oに配置されるようになりました...

undef: ___sincos_stret
Undefined symbols for architecture x86_64:
  "___sincos_stret", referenced from:
      _mdct_init in lto.o
      _dradfg in lto.o

Xcode 5 で OSX 10.9 DP を実行しています。これがリンクの手順です。

4

4 に答える 4

14

stret「構造体を返す」という意味で Apple の言葉です。___sincos_stretは LLVM の最適化です。 を呼び出して両方の結果を使用するコードを記述した場合sin(n)cos(n)コンパイラは構造体を返す sincos メソッドを 1 回呼び出し、両方を含む構造体を受け取ります。オペランドが同じ場合は、個別に計算するよりも、両方を一度に計算した方が高速です。

表面的なブラウジングでは、sinまたはが表示cosされませんinitInterTab2Dが、何かがインライン化されていると予想されます。

突っついている間、私は試しました:

cd /Applications/Xcode.app/Contents/Developer/Platforms 
grep -lr ___sincos_stret *

それを介して、nm可能性の高い結果を使用して、___sincos_stret関数が 7.0 以降の iOS と 10.9 以降の OS X の両方で、libsystem_m.dylibs の一部として公開されていることがわかりました。たとえば、Xcode がデフォルトの場所にインストールされている場合は、次を試してください。

nm /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system/libsystem_m.dylib | grep sincos

および/または:

nm /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/system/libsystem_m.dylib | grep sincos

どちらにもシンボルが表示されます。したがって、正しい解決策は、Xcode で古い展開ターゲットを設定するか、makefile で同等のことを行うことです。

于 2013-09-26T00:19:44.837 に答える
6

必要に応じて-mmacosx-version-min=10.8(または対象の OS バージョンが何であれ)。

于 2013-09-26T21:29:42.113 に答える
3

Xcode5 DPとOSX 10.9コマンドラインツールをアンインストールして再インストールすると、問題が解決したようです。以前のバージョンからのアップデートに問題があったと思います。

于 2013-09-28T03:06:44.977 に答える
2

次のファイルをテキスト エディターで開き、/opt/local/etc/macports/macports.conf のような行を追加します。

# MACOSX_DEPLOYMENT_TARGET - osx version to be compatible with earlier OSX version.
macosx_deployment_target            10.8
MACOSX_DEPLOYMENT_TARGET            10.8
于 2013-10-05T21:16:14.503 に答える