error: stdio.h: No such file or directory error during make

前端 未结 3 664
说谎
说谎 2020-12-30 15:56

I\'m trying to compile the following program in Ubuntu. But I keep getting the error: \"stdio.h: No such file or directory\" error.

#include 
         


        
相关标签:
3条回答
  • 2020-12-30 16:04

    Your Makefile isn't correct, please take a look at one of the many tutorials, for example: http://mrbook.org/tutorials/make/

    the simplest Makefile to build a standalone application should look something like that:

    all: hello
    
    hello: hello.o
        gcc hello.o -o hello
    
    hello.o: hello.cpp
        gcc -c hello.cpp
    
    clean:
        rm -rf *o hello
    

    Hope it helps !

    0 讨论(0)
  • 2020-12-30 16:06

    Your way of building your program is the way to build kernel module and not c program application. and stdio.h does not exist in the environment of the kernel development so that's why you get the error:

    error: "stdio.h: No such file or directory" error 
    

    1) If you want to build a linux application then your Makefile is wrong:

    You should modify your Makefile

    Use the following Makefile:

    all: hello
    
    test: test.c
        gcc -o hello hello.c
    
    clean:
        rm -r *.o hello
    

    2) If you want to build a kernel module then your c code is wrong

    • YOU CAN NOT use stdio.h in the kernel space development. Itdoes not exist in the environment of the kernel development so that's why you get the error
    • YOU CAN NOT use main() in the kernel module C code
    • YOU CAN NOT use printf() in the kernel module C code

    INSTEAD of using stdio.h, you have to use the following include

    #include <linux/module.h>   /* Needed by all modules */
    #include <linux/kernel.h>   /* Needed for KERN_INFO */
    

    INSTEAD of using int main() {, you have to use

    int init_module(void) {
    

    INSTEAD of using printf() use printk()

    Use the following hello module instead of your hello code

    /*  
     *  hello-1.c - The simplest kernel module.
     */
    #include <linux/module.h>   /* Needed by all modules */
    #include <linux/kernel.h>   /* Needed for KERN_INFO */
    
    int init_module(void)
    {
        printk(KERN_INFO "Hello world 1.\n");
    
        /* 
         * A non 0 return means init_module failed; module can't be loaded. 
         */
        return 0;
    }
    
    void cleanup_module(void)
    {
        printk(KERN_INFO "Goodbye world 1.\n");
    }
    

    Please refer to the following link for more detail about kernel module development

    0 讨论(0)
  • 2020-12-30 16:11

    The problem is you can't use printf() and stdio.h inside the kernel, and you don't use a main() function either. You need printk() and module.h

    #include <linux/module.h> /* Needed by all modules */
    #include <linux/kernel.h>
    
    int init_module(void)
    {
        printk(KERN_INFO "Hello world\n");
    
        return 0;
    }
    

    You should also have a exit()/cleanup() type function for when it unloads.

    void clean_module(void)
    {
        printk(KERN_INFO "Cleaning and exiting\n");
    }
    

    Then load the functions for the module:

    module_init(init_module);
    module_exit(clean_module);
    
    0 讨论(0)
提交回复
热议问题