2017-04-05 9 views
0

私はリング0のCアプリケーションでfloatまたはdouble値を使用しようとしているが、イムは、リンカエラーを取得:Cカーネルモード/リング0 - フロート/ダブル値

Fehler LNK1120 1 NICHTのaufgelösteExterne

Fehler LNK2001 Nichtaufgelöstesexternesシンボル "_fltused"。

float test = 1.2; 

どうすればこのエラーを解決できますか?

+0

本当にC++かCですか?とにかく、これがLinuxカーネルであると仮定すると、浮動小数点演算はサポートされません。固定長で必要とされる精度がintまたはlong longで操作を実行できます。 –

+0

@AjayBrahmakshatriya:Linuxカーネルは、 "ハード"フロート、つまりハードウェアでサポートされている浮動小数点をサポートしていません。しかし、特にARMの場合、コンパイラはしばしばライブラリサポートを使用して "ソフト"浮動小数点を使用することができます。これはCPUとカーネルにとって透過的です。 – MSalters

+2

あなたのコンパイラはあなたのプログラムを普通のユーザスペースプログラムのようにコンパイルします。あなたのカーネルモードプログラム用の標準Cライブラリがない(おそらく)ので、いくつかのシンボルがありません。浮動小数点数と倍数を使用しないでください。多くの場合、代わりに整数または固定小数点演算を使用することができます。 '_fltused'を' extern "C" {unsigned int _fltused = 1;}として定義することができます。 } '(正確な型を試してみる必要があるかもしれませんが)より多くのコードを書くときには、おそらくより多くのシンボルが欠けているでしょう。 – pvc

答えて

2

コンパイラは_fltusedに依存関係を挿入し、強制的にフロートサポートライブラリにリンクします。 ring0で実行できるライブラリがありますか?