由于某种原因程序给了我这个错误
undefined reference to createNetworkDriver
现在我的文件夹结构是:

mini-kernel/
            kernel/
                   drivers/
                           network/
                                   network.h
                                   network.c
           util/
                errors/
                       errors.c
           main.c

网络.h:
#ifndef _network_h_
#define _network_h_
#pragma once

#include <stdbool.h>
#include<stdint.h>

typedef struct
{
    char *name;
    bool initalized;
    int32_t status;
    int (*initalize)(void);
}NetworkDriver;

NetworkDriver* createNetworkDriver(void);
NetworkDriver* destroyNetworkDriver(NetworkDriver *self);
#endif

网络c:
#include "network.h"
#include "../../../util/errors/errors.c"

extern void die(const char *message);

NetworkDriver* createNetworkDriver(void)
{
    printf("Working");
    NetworkDriver nd = malloc(sizeof(NetworkDriver));
}

NetworkDriver* destroyNetworkDriver(NetworkDriver *self)
{
    if(self->initalized == true)
        free(self);
    else
        die("NET_DRIVER FAILED TO DESTROY");

}

错误.c:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

void die(const char *message)
{
    if(errno) {
        perror(message);
    } else {
        printf("ERROR: %s\n", message);
    }

    exit(1);
}

最后是我的主播c:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include "kernel/drivers/network/network.h"


int main(int argc, char *argv[])
{
    NetworkDriver *nd = createNetworkDriver();
}

由于某种原因,当我运行main.c文件gcc main.c -std=c99 -w -lm时,我得到错误:undefined reference to createNetworkDriver
Im目前正在在线编程here

最佳答案

您需要使用所有源文件生成。仅仅包含头文件还不足以让编译器和链接器知道您真正需要的文件。
所以,不如这样做:

$ gcc main.c util/errors/errors.c kernel/drivers/network/network.c -std=c99 -o my_kernel -w -lm

这将把每个源文件构建成一个(临时)对象文件,并将所有对象文件链接到一个名为my_kernel的可执行文件中(使用-o选项指定)。

关于c - 未定义对“功能”的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38134253/

10-12 15:01