由于某种原因,程序给了我这个错误
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。
答案 0 :(得分:3)
您需要使用所有源文件进行构建。仅包含头文件不足以让编译器和链接器知道您真正需要哪些文件。
所以做这样的事情:
$ gcc main.c util/errors/errors.c kernel/drivers/network/network.c -std=c99 -o my_kernel -w -lm
这会将每个源文件构建到(临时)目标文件中,并将所有目标文件链接到一个名为my_kernel
的可执行文件中(使用-o
选项指定)。