在c中链接静态函数与另一个文件

时间:2014-05-13 04:27:00

标签: c linker

我有两个源文件: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'?

2 个答案:

答案 0 :(得分:0)

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

您无法直接引用该函数 - 因为它是静态的 - 并且在示例代码中被声明为静态意味着该函数对于外部世界是隐藏的。

答案 1 :(得分:0)

C中静态函数的可见性仅限于声明它们的文件。如果你在Ac中声明一个并从另一个文件中调用该函数,则会出现链接错误,该函数未被引用.Hope这将解决你的问题..