【问题标题】:C - how to include own headers kept in separate folderC - 如何包含保存在单独文件夹中的自己的标题
【发布时间】:2013-02-28 08:34:28
【问题描述】:

首先我几乎是一个初学者,所以我不知道如何解释我需要什么,但我会试一试。 (我搜索了但找不到完整的答案)。

我正在自学 C 并使用代码块。

我想创建自己的自定义函数迷你库以在我的程序中使用。

我有一个名为“C”的文件夹。在“C”中,我有一个名为“Exercises”的文件夹,我在其中完成了书中所有的小项目。

同样在“C”中,我想要另一个名为“MyC”的文件夹,我将在其中保存自己的头文件和包含自定义函数实现的 .c 文件。 例如,这些 .h 和 .c 将保存在“MyC”中:

//test.h

#ifndef _TEST_H
#define _TEST_H

int mySum(int, int);

#endif // _TEST_H

//test.c

#include <stdio.h>
#include "test.h"

int mySum(int a, int b)
{
    return a + b;
}

所以现在,我要做的是能够在“练习”中创建一个新项目,而不必将 test.h 和 test.c 的副本都带入项目中,而只需 #包括我的 test.h 并执行以下操作:

//testMain.c

#include <stdio.h>
#include <test.h>

int main(void)
{
    printf("\n2 + 1 = %d", mySum(2, 1));

    return 0;
}

我知道 用于标准标题,但引号用于当前文件夹中的标题,这就是我不想要的。

可以这样做吗?怎么样?

我已经阅读了关于进入设置>编译器和搜索目录添加我有标题但没有工作的路径。它给了我一个错误“对'mySum'的未定义引用” 我在#include 上尝试了引号和括号。

你们能否分步说明如何才能做到这一点?

【问题讨论】:

  • 听起来你没有链接 C 文件。
  • 您遇到了链接器错误,因为链接器无法在MyC 中找到少数符号的定义。您是否为MyC 目录中的所有文件构建了一个库?看起来您正在使用某些 IDE 进行编译。是这样吗?你愿意直接使用命令行gcc吗?
  • 我不熟悉代码块,但通常你需要设置你的包含路径并将你的 C 文件从任何地方添加到你的项目中(除非你想创建一个库——但这可能太复杂了)。您需要阅读您的 IDE 文档,特别注意“包含文件”和“添加外部代码”或一些类似的主题。
  • 是的,我以为我读过有关链接 .c 文件的信息,但我不知道该怎么做。 编辑是的,如果我使用命令行并编译“testMain.c”,它只有在我将所有文件都放在同一个文件夹中时才有效,但这就是我不想要的
  • 您应该将文件test.c 添加到您的项目中。右键单击您的项目 > 添加文件 ... > 然后选择它。当你编译你的项目时,它会被编译并与之链接。

标签: c header


【解决方案1】:

用于标题

如果您想移回一个文件夹,请执行以下操作:#include "../something.h"

在你的情况下,只需这样做:#include "../MyC/test.h"

.. 仅表示返回一个目录

如果你不喜欢那样做,或者你只想#include "test.h",你可以使用-I编译器参数来做,像这样:

-I'../MyC/'

对于 c 文件

你需要在编译器参数中做类似的事情。

gcc testMain.c ../MyC/test.c

请记住,.. 表示返回一个目录

【讨论】:

【解决方案2】:

您已经添加了标头文件夹,这很好。您可以照常#include。如果找不到您的标头,您将收到“找不到文件”错误。

但是您还需要链接到此目录中的目标代码,并且您需要指定要搜索您的函数的目标文件。您的 IDE 中应该有一个设置来添加编译器选项,例如../MyC/test.o。如果您尚未在这些函数中编译代码,则需要指定 .c 文件。

【讨论】:

  • 感谢帮助。我让它像这样工作:在全局设置中,包含我的标题所在的路径,然后在项目设置中,在链接器设置中包含 .o 文件的路径
【解决方案3】:

编译时需要包含-I 选项。例如:

gcc -I<path-to-headers> <path-to>/test.c testMain.c -o test_driver

【讨论】:

  • 虽然这个答案告诉了如何指定包含路径,但它没有回答 OP 的错误 undefined reference to something - 这是一个链接器错误。
  • 已修复,应该更完整
【解决方案4】:

考虑到“folder_to_code”包含test.htest.c

您可以使用gcc 命令添加包含文件夹:

gcc -I folder_to_code folder_to_code/test.c testMain.c -Wall -o program.exe

这样您就可以毫无问题地将#include "test.h" 添加到代码中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2020-03-16
    • 2015-08-10
    • 2017-03-30
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多