【发布时间】:2020-04-24 11:49:48
【问题描述】:
我通常可以使用 nm 解决链接器的问题,例如“未定义的引用”,并弄清楚我忘记在 makefile 中添加源文件,但在这里我无法理解发生了什么:
$ make
gcc -I.. -I../../data_structures
-I../../iterator -I../../stack -I../../array_stack
-Wall -Wextra -Werror array_collection.o -o array_collection
-L.. -larray_collection
-L../../data_structures -ldyn_array
-L../../iterator -literator
-L../../stack -lstack
-L../../array_stack -larray_stack
../../array_stack/libarray_stack.a(array_stack_init_stack.o): In function `array_stack_init_stack':
array_stack_init_stack.c:(.text+0x79): undefined reference to `stack_init'
$ nm ../../stack/libstack.a| grep stack_init
auto_stack_init.o:
0000000000000000 T auto_stack_init
0000000000000000 T stack_init
你能帮帮我吗? 说 gcc 命令在我正在使用的 vm 上别名为 clang 可能很重要。
这里是stack_init的代码:
void stack_init(t_stack *stack, void *realisation)
{
stack->realisation = realisation;
stack->_release = stack->release;
}
【问题讨论】:
-
显而易见的问题是:您是否真的定义了一个名为
stack_init的函数?我们不知道您的代码是什么样的,所以在这里很难为您提供帮助 -
你在哪里定义
stack_init? -
这里需要哪部分代码?不想发垃圾邮件。
-
@David 您的问题很简单,函数 stack_init 从未定义,或者您错过了与定义它的文件的链接,但您调用了它。因为您与 stack lib (
-lstack) 链接,这意味着您声明它但从未定义它 -
谢谢@KamilCuk 会改变它