如何在C中创建模块

cha*_*m15 1 c modularity module static-linking

我有一个接口,我希望能够静态链接模块.例如,我希望能够调用名为FOO的所有函数(虽然在单独的文件中)或匹配某个原型,最终调用文件中的函数而不在其他文件中使用标题.不要说这是不可能的,因为我发现了一个可以做到的黑客,但我想要一个非黑客攻击的方法.(黑客是使用nm来获取函数及其原型然后我可以动态调用函数).此外,我知道您可以使用动态链接执行此操作,但是,我想静态链接文件.有任何想法吗?

Mar*_*wis 5

将所有函数的表放入每个翻译单元:

struct functions MOD1FUNCS[]={
     {"FOO", foo},
     {"BAR", bar},
     {0, 0}
};
Run Code Online (Sandbox Code Playgroud)

然后将一个表放入列出所有这些表的主程序中:

struct functions* ALLFUNCS[]={
    MOD1FUNCS,
    MOD2FUNCS,
    0
};
Run Code Online (Sandbox Code Playgroud)

然后,在运行时,搜索表,并查找相应的函数指针.