ld 返回 1 退出状态 - c 文件结构

ld returned 1 exit status - c file structure

我正在编辑一个开源 C 项目以根据我的使用对其进行自定义。基本上它具有以下文件结构:

                  |--- /include ----- loremipsum.h
                  |
/loremipsum ----- |--- /ex      ----- loremipsum.c and more
                  |
                  |--- /src     ----- other helpful functions

在 loremipsum.h 中可以通过

找到 /src 中定义的函数列表
#ifdef __cplusplus
extern "C" {
#endif

但这还没有被我编辑,所以我想它应该可以。

在loremipsum.c中有:

编辑 c 文件并尝试通过

重新创建新的 exe 文件后
$ gcc  loremipsum.c -o customloremipsum.exe

首先我得到一个错误,找不到 loremipsum.h,所以我将包含更改为“path/to/include/loremipsum.h”,我在所有包含该包含的 .c 文件中都这样做了。

那么,所有的(1)都出错了,即 “/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: /tmp/ccBt2CkE.o:loremipsum.c:(.text+0x3745): 未定义引用function_defined_in_ex' ld 返回了 1 个退出状态”。 我真的想不通,为什么。

我觉得第一个include错误已经很奇怪了,按照我的理解,找到.h文件应该没有问题。另外,我不知道如何弄清楚在哪里可以找到 (1).

中的函数

很抱歉这么久post,我只是害怕,我忘记了一些基本的东西。

我正在研究 Windows 10 并在 Cygwin shell 中编译。 感谢您的帮助。

您需要使用 -I 参数告诉编译器在哪里寻找包含文件,例如:

gcc -I../include loremipsum.c -o customloremipsum.exe

不要在 #include 行中指定完整路径。

您获得的任何未定义引用都是由链接器引起的,因为 .c 定义符号的文件或对象或库尚未编译。

此外,最好将编译和链接步骤分开,以帮助您解决问题。像这样:

gcc -c -I../include loremipsum.c -o customloremipsum.o
gcc customloremipsum.o -o customloremipsum.exe