对“函数”的未定义引用
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
选项指定).
出于某种原因,程序给我这个错误
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
选项指定).