对“函数”的未定义引用

undefined reference to `function'

出于某种原因,程序给我这个错误

undefined reference to createNetworkDriver

现在我的文件夹结构是:

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

network.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

network.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");

}

errors.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);
}

最后是我的 main.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.

我目前正在在线编程 here

您需要使用所有 个源文件进行构建。仅包括头文件不足以让编译器和 linker 知道您真正需要哪些文件。

所以做这样的事情:

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

这会将每个源文件构建到一个(临时)目标文件中,并且 link 所有目标文件一起构建到一个名为 my_kernel 的可执行文件中(使用 -o 选项指定).