【发布时间】:2015-12-01 23:41:54
【问题描述】:
我有一个程序可以生成包含单个函数void foo(float* n) {} 的 C 文件。这些文件在函数中具有不同的代码,但名称始终相同。我想创建一个依次运行它们的 C 文件,但是当我尝试包含多个文件时,我得到一个重新定义错误(来自链接器?)。我无法更改生成的 C 文件(否则我只会更改函数名称)。生成的文件都具有不同且唯一的名称,即使函数都有共同的名称,我只需要一次使用一个函数(如果有任何类型的释放操作,如宏的#undef)。
【问题讨论】:
-
几个可能的解决方案。 1. 在编译期间,使用文件特定名称重新定义
foo。例如gcc -c foo1.c -Dfoo=foo1或 2. 使用dlopen、dlsym和dlclose打开每个对象,获取foo地址并为每个文件调用该函数。 -
将函数声明为静态有帮助吗?这样可以防止链接器问题,但是您需要每个 C 文件独有的东西来调用通用函数。
-
@rcgldr 问题在于我无法更改生成器发出的文件以使其成为静态文件。否则我只会更改函数名称。
-
你自己编译吗?生成之后就不能修改了吗?