C内核模式/ring0-浮点/双精度值

C内核模式/ring0-浮点/双精度值,c,kernel,C,Kernel,我试图在我的ring0 c应用程序中使用float或double值,但收到链接器错误: 费勒LNK1120 1奈希特奥弗格尔斯特外景酒店 Fehler LNK2001没有外部符号“_fltused” 如何解决此错误?您的编译器在\u fltused上插入依赖项,以强制您链接浮点支持库。您有这样一个能够在ring0中运行的库吗 编译器在\u fltused上插入一个依赖项,以强制您链接浮点支持库。您有这样一个能够在ring0中运行的库吗你确定是C++还是C?无论如何,假设这是Linux内核,则不支

我试图在我的ring0 c应用程序中使用float或double值,但收到链接器错误:

费勒LNK1120 1奈希特奥弗格尔斯特外景酒店

Fehler LNK2001没有外部符号“_fltused”


如何解决此错误?

您的编译器在
\u fltused
上插入依赖项,以强制您链接浮点支持库。您有这样一个能够在ring0中运行的库吗

编译器在
\u fltused
上插入一个依赖项,以强制您链接浮点支持库。您有这样一个能够在ring0中运行的库吗

你确定是C++还是C?无论如何,假设这是Linux内核,则不支持浮点操作。如果在fixed中需要精度,您可以用int或long-long执行操作。@AjayBrahmakshatriya:Linux内核不支持“硬”浮点,即硬件支持的浮点。但特别是对于ARM,编译器通常能够使用库支持的“软”浮点。这对CPU是透明的,因此对内核也是透明的。你的编译器编译你的程序就像它是普通的用户空间程序一样。因为您(可能)没有用于内核模式程序的标准C库,所以它缺少一些符号。一种解决方法是避免使用浮点和双精度浮点。在许多情况下,可以使用整数或定点算术。您可以将
\u fltused
定义为
extern“C”{unsigned int\u fltused=1;}
(您可能需要试验确切的类型),但编写更多代码时可能会丢失更多符号。感谢您的快速帮助!对不起,这是一个C应用程序。我在这个项目中用C++开始,然后移动到C。而且
extern“C”{unsigned int\u fltused=1;}
对我来说效果很好!谢谢大家!!“内核是基于Windows的。”??Windows内核模式WDM驱动程序在使用浮点操作时必须遵循某些准则。这些在x86和x64系统之间有所不同。默认情况下,Windows关闭两个系统的算术异常。这个页面可能会给出一些提示。你确定是C++还是C?无论如何,假设这是Linux内核,则不支持浮点操作。如果在fixed中需要精度,您可以用int或long-long执行操作。@AjayBrahmakshatriya:Linux内核不支持“硬”浮点,即硬件支持的浮点。但特别是对于ARM,编译器通常能够使用库支持的“软”浮点。这对CPU是透明的,因此对内核也是透明的。你的编译器编译你的程序就像它是普通的用户空间程序一样。因为您(可能)没有用于内核模式程序的标准C库,所以它缺少一些符号。一种解决方法是避免使用浮点和双精度浮点。在许多情况下,可以使用整数或定点算术。您可以将
\u fltused
定义为
extern“C”{unsigned int\u fltused=1;}
(您可能需要试验确切的类型),但编写更多代码时可能会丢失更多符号。感谢您的快速帮助!对不起,这是一个C应用程序。我在这个项目中用C++开始,然后移动到C。而且
extern“C”{unsigned int\u fltused=1;}
对我来说效果很好!谢谢大家!!“内核是基于Windows的。”??Windows内核模式WDM驱动程序在使用浮点操作时必须遵循某些准则。这些在x86和x64系统之间有所不同。默认情况下,Windows关闭两个系统的算术异常。本页:可能会给出一些提示。
float test = 1.2;