我只是想让我的代码编译,但我一直遇到错误:
.\Objects\Lab4.axf: Error: L6200E: Symbol current_process multiply defined (by lab4_t0.o and 3140_concur.o).
.\Objects\Lab4.axf: Error: L6200E: Symbol current_process multiply defined (by process.o and 3140_concur.o).
.\Objects\Lab4.axf: Error: L6200E: Symbol process_queue multiply defined (by lab4_t0.o and 3140_concur.o).
.\Objects\Lab4.axf: Error: L6200E: Symbol process_queue multiply defined (by process.o and 3140_concur.o).
我真的不明白错误信息。
首先,我不确定process.o
是指process.h
还是process.c
(因此我不知道要关注哪个文件)。具有3140_concur.o
和3140_concur.c
的{{1}}也是如此。
其次,我不确定“多重定义”是什么意思。我想这意味着我实例化了3140_concur.h
& current_process
两次,但老实说我看不清楚是怎么回事,因为我只在process_queue
中“定义”current_process
和process_queue
:
process.h
我甚至不知道process_t * current_process;
process_t * process_queue;
如何定义lab4_t0.c
,所以我很困惑为什么会出现这些“多重定义”的错误消息。
尽管如此,我有一种感觉,因为在process_queue
我3140_concur.h
和#include "process.h"
我定义了process.h
和process_queue
我也current_process
}。同样适用于#include "3140_concur.h"
(I lab4_t0.c
)。但我这样做的原因是b / c #include "process.h"
使用process.c
中的方法,3140_concur.h
使用来自lab4_t0.c
的方法。
因此,如果我的预感是正确的,这就是我收到错误的原因,我怎样才能正确地模块化我的代码(又名我应该process.h
而不是#include
),这样我就不会得到这些错误?
如果有人可以输入我需要做的代码来删除这些错误,那就太棒了!
注意:如果您想知道我为什么创建#include
以及为什么我不将process.h
中的所有内容都放在process.h
文件中,原因是它导致错误w / 3140_concur.h
我不想进入这里。
lock.c
lock.c
lock.h
#include "lock.h"
extern process_t * current_process;
extern process_t * process_queue;
3140_concur.c
#ifndef __LOCK_H_INCLUDED__
#define __LOCK_H_INCLUDED__
#include "3140_concur.h"
#include "shared_structs.h"
void l_init(lock_t* l);
void l_lock(lock_t* l);
void l_unlock(lock_t* l);
#endif /* __LOCK_H_INCLUDED */
3140_concur.h
#include "3140_concur.h"
#include <stdlib.h>
process.h
#ifndef __3140_CONCUR_H__
#define __3140_CONCUR_H__
#include <stdlib.h>
#include <fsl_device_registers.h>
#include "process.h"
void process_blocked (void);
void process_terminated (void);
unsigned int * process_stack_init (void (*f)(void), int n);
void process_stack_free (unsigned int *sp, int n);
void process_begin (void);
#endif
process.c
(我做#include <stdlib.h>
#include <fsl_device_registers.h>
#include "3140_concur.h"
struct process_state;
typedef struct process_state process_t;
unsigned int * process_select (unsigned int * cursp);
process_t * current_process;
process_t * process_queue;
void process_start (void);
int process_create (void (*f)(void), int n);
b / c我希望在调用任何函数之前它们为NULL)
process_t* process_queue = NULL; & process_t* current_process = NULL;
lab4_t0.c
#include "3140_concur.h"
#include "shared_structs.h"
#include <stdlib.h>
#include <fsl_device_registers.h>
process_t* process_queue = NULL;
process_t* current_process = NULL;
非常感谢任何帮助!
答案 0 :(得分:0)
将extern
添加到我current_process
和process_queue
中process.h
的定义中删除了我的“多重定义”错误(感谢@JonathanLeffler)
现在我得到了一个不同的错误,但至少我解决了这个问题:)