如何在我的 C 卸载函数中调试 "undefined reference"?
How to debug "undefined reference" in my C unload function?
这是卸载功能代码。
bool unload(void)
{
void release_nodes (node* node_to_free);
//looking for children node to free
for (int i = 0; i < 27; i++)
{
if (node_to_free -> children[i])
{
release_nodes (node_to_free -> children[i]);
}
}
free (node_to_free);
return false;
}
这是我编译时收到的响应。
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -c -o speller.o speller.c
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -c -o dictionary.o dictionary.c
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -o speller speller.o dictionary.o
dictionary.o: In function `unload':
/home/ubuntu/workspace/pset5/speller/dictionary.c:170: undefined reference to `release_nodes'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [speller] Error 1
您应该定义 release_nodes()
函数,而不是声明它。
void release_nodes (node* node_to_free) {
//looking for children node to free
for (int i = 0; i < 27; i++)
{
if (node_to_free -> children[i])
{
release_nodes (node_to_free -> children[i]);
}
}
free (node_to_free);
}
然后你从unload()
:
调用这个函数
bool unload(void) {
if (root_node) {
release_nodes(root_node);
root_node = NULL;
}
return false;
}
将 root_node
替换为保存树根的全局变量的名称。
这是卸载功能代码。
bool unload(void)
{
void release_nodes (node* node_to_free);
//looking for children node to free
for (int i = 0; i < 27; i++)
{
if (node_to_free -> children[i])
{
release_nodes (node_to_free -> children[i]);
}
}
free (node_to_free);
return false;
}
这是我编译时收到的响应。
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -c -o speller.o speller.c
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -c -o dictionary.o dictionary.c
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -o speller speller.o dictionary.o
dictionary.o: In function `unload':
/home/ubuntu/workspace/pset5/speller/dictionary.c:170: undefined reference to `release_nodes'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [speller] Error 1
您应该定义 release_nodes()
函数,而不是声明它。
void release_nodes (node* node_to_free) {
//looking for children node to free
for (int i = 0; i < 27; i++)
{
if (node_to_free -> children[i])
{
release_nodes (node_to_free -> children[i]);
}
}
free (node_to_free);
}
然后你从unload()
:
bool unload(void) {
if (root_node) {
release_nodes(root_node);
root_node = NULL;
}
return false;
}
将 root_node
替换为保存树根的全局变量的名称。