erJSu 2023-12-08 11:01 采纳率: 80%
浏览 13
已结题

ZED双链表make编译报错解决思路问题


tests/list_tests.c:108:1: note: in expansion of macro ‘RUN_TESTS’
  108 | RUN_TESTS(all_tests);
      | ^~~~~~~~~
/usr/bin/ld: /tmp/cczD3Vpr.o: in function `test_create':
/home/suyuzhu/lcthw/liblcthw/tests/list_tests.c:12: undefined reference to `List_create'
/usr/bin/ld: /tmp/cczD3Vpr.o: in function `test_shift':
/home/suyuzhu/lcthw/liblcthw/tests/list_tests.c:84: undefined reference to `List_shift'
/usr/bin/ld: /home/suyuzhu/lcthw/liblcthw/tests/list_tests.c:87: undefined reference to `List_shift'
collect2: error: ld returned 1 exit status
make: *** [<内置>:tests/list_tests] 错误 1

问题表现如上,最终发现都是对应的c文件函数出现错别字。
明明跟list.c没关系, 为什么错误都是发生在list.c中呢?
list_test.c包含的头文件如下:

#include "minunit.h"
#include "lcthw/list.h"
#include <assert.h>


```c


```

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-08 12:22
    关注

    【以下回答由 GPT 生成】

    这是一个链接问题,可能是在链接时没有正确引用liblcthw库中的list.c文件,导致找不到函数的定义。要解决这个问题,可以按照以下步骤进行排查和修复:

    1. 确保在Makefile中正确地配置了链接liblcthw库。找到Makefile中的链接部分,确认是否包含了liblcthw库的路径和文件名,比如-L/path/to/liblcthw -llcthw

    2. 确保在list_tests.c文件中正确引入了list.h头文件。检查list_tests.c文件的开头部分,确认是否包含了#include "lcthw/list.h"

    3. 确保在list_tests.c文件中的测试函数使用了正确的函数名。根据报错信息,检查list_tests.c文件中的测试函数,确保调用的函数名与liblcthw库中的函数名一致。比如,检查test_creat和test_shift函数中是否正确调用了List_create和List_shift函数。

    4. 确保在编译时正确地链接了liblcthw库。在编译时,确保使用了正确的链接参数,包括库路径和库名称。可以在编译命令中添加-L/path/to/liblcthw -llcthw参数来确保正确链接liblcthw库。

    综上所述,要解决该问题,需要逐步检查Makefile配置、头文件引入、函数调用和链接参数,确保正确地引用了liblcthw库中的list.c文件,并正确地链接了liblcthw库。如果以上步骤都正确并且问题仍然存在,可能需要进一步调试和排查相关代码和配置文件。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 12月8日