This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(32个答案)
6年前关闭。
我正在尝试将被黑客入侵的程序移植到GDB-7.6.1。以前在GDB-3.2.2下很好。
但是,尽管我没有碰到任何与这些宏定义的变量有关的东西,但还是遇到了一些编译错误。最重要的是,Makefile中的相关句子是相同的。但是objdump显示它们在宏变量中是不同的。
配置完成后,编译器会报错
上一个程序engine.o仅具有delayslot32,但没有SC_PRE_PROC_DELAY_SLOT
mips.igen代码为:
makefile实际上与gdb3.2.2下的程序相同:
sim / mips / Makefile:
未定义的变量,编译器抱怨的实际上是在其中定义的
scSupport.h
(32个答案)
6年前关闭。
我正在尝试将被黑客入侵的程序移植到GDB-7.6.1。以前在GDB-3.2.2下很好。
但是,尽管我没有碰到任何与这些宏定义的变量有关的东西,但还是遇到了一些编译错误。最重要的是,Makefile中的相关句子是相同的。但是objdump显示它们在宏变量中是不同的。
配置完成后,编译器会报错
libsim.a(engine.o): In function `delayslot32':
/home/ruizhewu/work/gdb/gdb761-5-M3/gdb-7.6.1/lx-bcm-sc/sim/mips/../../../sim/mips/mips.igen:77: undefined reference to `SC_PRE_PROC_DELAY_SLOT'
/home/ruizhewu/work/gdb/gdb761-5-M3/gdb-7.6.1/lx-bcm-sc/sim/mips/../../../sim/mips/mips.igen:85: undefined reference to `SC_POST_PROC_DELAY_SLOT'
bash-3.2$ objdump -t libsim.a |less
........
support.o: file format elf64-x86-64
SYMBOL TABLE:
000000000000021d g F .text 00000000000000bd delayslot32
0000000000000000 *UND* 0000000000000000 SC_PRE_PROC_DELAY_SLOT
engine.o: file format elf64-x86-64
SYMBOL TABLE:
000000000000d72f l F .text 00000000000000bd delayslot32
...
...
...
0000000000000000 *UND* 0000000000000000 SC_PRE_PROC_DELAY_SLOT
上一个程序engine.o仅具有delayslot32,但没有SC_PRE_PROC_DELAY_SLOT
mips.igen代码为:
:function:::address_word:delayslot32:address_word target
{
instruction_word delay_insn;
SC_PRE_PROC_DELAY_SLOT(SD, CIA);
sim_events_slip (SD, 1);
DSPC = CIA;
CIA = CIA + 4; /* NOTE not mips16 */
STATE |= simDELAYSLOT;
delay_insn = IMEM32 (CIA); /* NOTE not mips16 */
idecode_issue (CPU_, delay_insn, (CIA));
STATE &= ~simDELAYSLOT;
SC_POST_PROC_DELAY_SLOT(SD);
return target;
}
makefile实际上与gdb3.2.2下的程序相同:
sim / mips / Makefile:
semantics.o: sim-main.h scSupport.h adslExtension.h semantics.c $(SIM_EXTRA_DEPS)
engine.o: sim-main.h scSupport.h adslExtension.h engine.c $(SIM_EXTRA_DEPS)
support.o: sim-main.h support.c $(SIM_EXTRA_DEPS)
idecode.o: sim-main.h scSupport.h adslExtension.h idecode.c $(SIM_EXTRA_DEPS)
itable.o: sim-main.h itable.c $(SIM_EXTRA_DEPS)
scSupport.o: scSupport.h adslExtension.h scSupport.c $(SIM_EXTRA_DEPS)
未定义的变量,编译器抱怨的实际上是在其中定义的
scSupport.h
#define SC_PRE_PROC_DELAY_SLOT(sd, cia) scEventEndOfInstExe(sd, cia)
#define SC_POST_PROC_DELAY_SLOT(sd)
最佳答案
在我看来,头文件scSupport.h并未包含在使用宏的文件之一中。要么是宏,要么是有条件定义的,而实际上没有设置。
找出原因。
关于c++ - C++中未定义的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21690346/
10-11 15:29