在 C 中链接外部变量

发布于 2024-07-20 00:47:23 字数 446 浏览 8 评论 0原文

在 Unix 中,我有三个主要文件。 其中一个是库,另一个是程序。

  • MyLib.cMyLib.h 是库。
  • main.c 是程序。

MyLib.h 中,我有一个声明 (extern int Variable;)。 当我尝试在 main.c 中使用 Variable 时,我不能。 当然,我已将 MyLib.h 包含在 MyLib.cmain.c 中,并且我也链接了它们。 无论如何,该变量在 main.c 中无法识别。

当我链接程序时如何获得可用的变量?

In Unix, I have got three main files. One of them is a library and the other one is a program.

  • MyLib.c and MyLib.h are the library.
  • main.c is the program.

In MyLib.h I have a declaration (extern int Variable;). When I try to use Variable in main.c I cannot. Of course I have included MyLib.h in MyLib.c and in main.c, and I link them too. Anyway the variable is not recognized in main.c.

How do I get the variable available when I link the program?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瞎闹 2024-07-27 00:47:23

变量 必须在某处定义。 我会在 MyLib.c 中将其声明为全局变量,然后仅在 main.c 中将其声明为 extern

发生的情况是,对于 MyLib.cmain.c 来说,编译器被告知 Variable 存在并且是一个 int,但它在其他地方 (extern)。 这很好,但它实际上必须在其他地方,当你的链接器尝试将所有文​​件链接在一起时,它找不到实际上在任何地方的 Variable ,所以它告诉你它不存在不存在。

试试这个:

MyLib.c:

int Variable;

MyLib.h:

extern int Variable;

main.c:

#include "MyLib.h"

int main(void)
{
    Variable = 10;
    printf("%d\n", Variable);
    return 0;
}

Variable must be defined somewhere. I would declare it as a global variable in MyLib.c, and then only declare it as extern in main.c.

What is happening is that, for both MyLib.c and main.c, the compiler is being told that Variable exists and is an int, but that it's somewhere else (extern). Which is fine, but then it has to actually be somewhere else, and when your linker tries to link all the files together, it can't find Variable actually being anywhere, so it tells you that it doesn't exist.

Try this:

MyLib.c:

int Variable;

MyLib.h:

extern int Variable;

main.c:

#include "MyLib.h"

int main(void)
{
    Variable = 10;
    printf("%d\n", Variable);
    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文