【问题标题】:Linking static function from another file in c从c中的另一个文件链接静态函数
【发布时间】:2014-05-13 04:27:00
【问题描述】:

我有两个源文件:A.c 和 B.c

A.c有一个函数,call_me:

static int call_me();

void call_me_register()
{
    register_call_me(call_me);
}

如你所见,call_me函数被用作变量,所以它在A.o中有一个call_me的符号

现在,我想在 B.c 文件中调用这个 call_me 函数。

static int call_me();

void call_call_me()
{
    call_me();
}

如果我尝试链接 B.o,我会遇到链接错误,即没有 call_me 的此类引用。

这里的约束如下:由于某种原因,我无法修改 A.c。 有没有人可以在 B.c 的 A.c 中调用“call_me”?

【问题讨论】:

  • 不是一个真正的C++问题——上面的代码和用法是C——把标签改成了C
  • @Soren 有点像C++,因为函数名register_call_me被重载了(但是越看越觉得是个错误)。
  • @paddy -- 好点,两者都同意...
  • 哦,这是一个错误,已修复:-)

标签: c linker


【解决方案1】:

C 中静态函数的可见性仅限于声明它们的文件。因此,如果您在 Ac 中声明一个并从另一个文件 bc 调用该函数,您将收到一个链接错误,表明该函数未引用..希望这将解决你的问题..

【讨论】:

    【解决方案2】:

    A.cpp 中的register 函数可能会在某处存储指向该函数的指针(因此这是注册),您可以使用该指针调用该函数。 -- 所以寻找一个函数来获取注册的 call_me 函数。

    您不能直接引用该函数——因为它是静态的——并且在示例代码中被声明为静态意味着该函数对外界是隐藏的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多