【问题标题】:How can I use multiple functions with the same name in other C files if they have the same name and I can't modify the other files?如果其他 C 文件具有相同名称并且我无法修改其他文件,如何在其他 C 文件中使用具有相同名称的多个函数?
【发布时间】:2015-12-01 23:41:54
【问题描述】:

我有一个程序可以生成包含单个函数void foo(float* n) {} 的 C 文件。这些文件在函数中具有不同的代码,但名称始终相同。我想创建一个依次运行它们的 C 文件,但是当我尝试包含多个文件时,我得到一个重新定义错误(来自链接器?)。我无法更改生成的 C 文件(否则我只会更改函数名称)。生成的文件都具有不同且唯一的名称,即使函数都有共同的名称,我只需要一次使用一个函数(如果有任何类型的释放操作,如宏的#undef)。

【问题讨论】:

  • 几个可能的解决方案。 1. 在编译期间,使用文件特定名称重新定义foo。例如gcc -c foo1.c -Dfoo=foo1 或 2. 使用 dlopendlsymdlclose 打开每个对象,获取 foo 地址并为每个文件调用该函数。
  • 将函数声明为静态有帮助吗?这样可以防止链接器问题,但是您需要每个 C 文件独有的东西来调用通用函数。
  • @rcgldr 问题在于我无法更改生成器发出的文件以使其成为静态文件。否则我只会更改函数名称。
  • 你自己编译吗?生成之后就不能修改了吗?

标签: c linker


【解决方案1】:

您可以使用预处理器在编译时更改每个文件的函数名称,例如

$ gcc -Wall -Dfoo=foo_1 -c bar1.c
$ gcc -Wall -Dfoo=foo_2 -c bar2.c
$ gcc -Wall -Dfoo=foo_3 -c bar3.c
$ gcc -Wall main.c bar1.o bar2.o bar3.o

这样你就可以从main()调用函数foo_1()foo_2()foo_3()

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多