Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 核c函数错误的多重定义_Android_C_Compiler Errors_Linux Kernel - Fatal编程技术网

Android 核c函数错误的多重定义

Android 核c函数错误的多重定义,android,c,compiler-errors,linux-kernel,Android,C,Compiler Errors,Linux Kernel,我目前正在为我的android设备编译内核 不幸的是,我遇到了这个编译错误并坚持了下去 编译器说: drivers/dpram/built-in.o:(.bss+0x2815c): multiple definition of `pm_dev' drivers/net/built-in.o:(.bss+0x1ac4): first defined here 在drivers/dpram.cı中: struct device *pm_dev; pm_dev = device_creat

我目前正在为我的android设备编译内核 不幸的是,我遇到了这个编译错误并坚持了下去

编译器说:

drivers/dpram/built-in.o:(.bss+0x2815c): multiple definition of `pm_dev'
drivers/net/built-in.o:(.bss+0x1ac4): first defined here
在drivers/dpram.cı中:

struct device *pm_dev;

    pm_dev = device_create(sec_class, NULL, 0, NULL, "pm");
    if(IS_ERR(pm_dev))
        pr_err("Failed to create device(pm)!\n");
    if(device_create_file(pm_dev, &dev_attr_info) < 0)
        pr_err("Failed to create device file(%s)!\n", dev_attr_info.attr.name);
    if(device_create_file(pm_dev, &dev_attr_power_down) < 0)
        pr_err("Failed to create device file(%s)!\n", dev_attr_power_down.attr.name);
struct device *pm_dev;

    if (!device_init_wakeup(dev, 1))
        pm_dev = dev;

    if (pm_dev) {
        device_init_wakeup(pm_dev, 0);
        pm_dev = NULL;
    }

我目前正试图弄清楚,但ı还不能

这个错误是因为

struct device *pm_dev;
是C语言中的一个定义。它定义了一个指向结构
device
的指针,它的名称是
pm\u dev
。不允许多次定义变量,因此您应该在所有其他源文件中声明
pm_dev
extern,但仅在您实际定义变量的源文件中声明

声明:

单一定义:

struct device *pm_dev;

因此,我应该检查所有源代码并转换所有pm_dev定义(struct device*pm_dev;-->extern struct device*pm_dev;)吗?我在dpram.c和bcmsdh_linux.c文件中都转换了pm_dev定义,但现在在dpram.ohmm文件中出现了“未定义的pm_dev引用”错误。。。我只在bcmsdh_linux.c文件中转换了pm_dev定义,并且没有触及dpram.c文件…现在它编译得很好…你认为ı犯了错误吗?这是一个好方法吗?这不只是一个声明,或者特别是一个前瞻性声明吗?在我看来,定义应该像一个赋值;以及int*pi;在C和C++中是定义。标准中并没有fwd声明这样的东西。这是一条规则,规定“声明是一个定义,除非它[…]是一个类名声明[…]”(3.1/2,C++03),用作fwd声明。
struct device *pm_dev;