web-dev-qa-db-ja.com

モジュールが有効になっている場合、tgmath.hは機能しません

Arm64を処理するときに、_tgmath.h_を使用して_CGFloat typedef float/double_の混乱に対処することを検討しました。

この回答 それが私にとってまったく機能しなかったことを除いて、それを使用する方法のかなり良い説明があります。何があっても、私のコードはまだ_math.h_関数を呼び出していました。

すべてのプロジェクトコンパイラ設定を確認した後、「モジュール」機能( @ import vs #import --iOS 7 )を無効にするとすべて機能することがわかりました。より具体的には、プロジェクト設定のオプションは、_Apple LLVM 5.1 - Language - Modules_ドロップダウンでEnable Modules(C and Objective-C)と呼ばれます。

この問題の簡単な例を確認するには、tgmathを使用するプロジェクトをダウンロードしてください MBProgressHUDなど 、モジュールプロジェクト設定を有効にするとどうなるかを確認してください。 _tgmath.h_呼び出しは、通常の_math.h_呼び出しに置き換えられます。

私の質問は:

  1. モジュールがtgmathの適切なインポートを妨げるのはなぜですか?

  2. それを回避してtgmathとモジュールの両方を使用する方法はありますか?引き続き使用したいです。

69
Dima

何が問題を引き起こしているのかわかりませんが、回避策として、少なくともtgmath.hを使用しているファイルに対してのみモジュールを無効にすることができます。

  • Xcodeでターゲットの[ビルドフェーズ]タブに移動します。
  • [ソースのコンパイル]フェーズで、ソースファイルを見つけます。
  • ソースファイルをダブルクリックし、CompilerFlagsポップオーバーに-fno-modulesと入力して、そのファイルのClangモジュールを無効にします。

少なくともこの方法では、ほとんどのプロジェクトでモジュールのメリットを享受できます。 (もちろん、これは、ソースファイルの大部分にtgmath.hが必要ないことを前提としています。)

3
Adam Sharp

Ctgmathという名前ですでに数学ライブラリにある可能性があります: Link

1
dammkewl