1

LLVMJITバックエンドを使用してコードをオンザフライでコンパイルするC++アプリに取り組んでいます。このJITコンパイル済みコードでは、すべての関数を呼び出せるようにしたいのですmath.hが、現在は一部の関数でのみ機能します。つまりfabs、存在するが存在しfabsfない場合です。

のシンボルfabsmsvsrt.libランタイムライブラリにfabsfあるようですが、両方とも私のシステムで宣言されているにもかかわらず、そうではありませんmath.h。間違ったランタイムライブラリにリンクしていますか?または、他の場所から「拡張」数学dllを取得して、それにリンクする必要がありますか?

  • プラットフォーム:Windows 7、Visual Studio Express 2012
  • プロパティでは、C/C++ > Code Generation > Runtime library=マルチスレッドDLL(/MD
4

1 に答える 1

2

場合によっては、math.hがこのようにfabsfを定義しているように見えます(MSVC2010 Expressに含まれているmath.hから取得)

#define fabsf(x)    ((float)fabs((double)(x)))

ランタイムライブラリはおそらくこのように実装されています。つまり、fabsfはまったく存在せず、「通常の」fabsfは_fabs()の呼び出しによってCプリプロセッサに置き換えられます。

于 2013-02-15T05:09:41.117 に答える