这个有点尴尬。我知道发生了什么,但不知道为什么。我收到“未定义的引用”错误,这意味着链接器 (ld) 没有从我创建的库中放入代码。
我目前正在玩 Zed A. Shaw “Learn C the Hard Way”课程。我正在尝试完成练习 32,但我不断收到同样的错误。
在本书中,您开发了一个运行以下命令的 make 文件:
cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG build/liblcthw.a \
tests/list_tests.c -o tests/list_tests
其中 -g 是启用调试信息,-Wall 是启用“所有”警告,-Wextra 是启用更多警告,-Isrc 将 src 目录包含到库目录中,-o tests/list_tests 是产生输出该目录中的名称,-DNDEBUG 用于启用代码中的变量,-O2 用于级别 2 优化(无论这意味着什么)和 build/liblcthw.a 以包含该库(正在构建的那个)。其余的我不知道他们在做什么。
如果我猜对了,src 目录中有一个 list.c,它创建了一个对象 list.o。该对象稍后通过 ar 和 ranlib 包含在 lib 中。所以调用头文件 list.h 应该让 ld 在 build/liblcthw.a 中查找 list.o。问题是 ld 由于某种原因没有读取 build/liblcthw.a。所以我得到了这个未定义的错误引用。
我曾尝试联系 Zed,但他显然是个大忙人。所以我希望在这里得到帮助。告诉我是否需要添加有关该问题的更多信息。到目前为止,这是整个图书馆的链接。
我希望有一个人可以帮助我。