是否可以在运行时定义C函数?

时间:2012-12-30 06:46:37

标签: objective-c ios objective-c-runtime

  

可能重复:
  Dynamically creating functions in c

以下是我想做的一个例子:

void  attribute((constructor)) someFunction() {
    // Would be nice to define C function "someFunction2" somehow here.
}

我知道class_addMethod允许在运行时向Objective-C类添加C函数。

是否可以将C函数添加到C main空间?

如果我正在考虑这种做事方式,请不要告诉我我错了 - 我对它感兴趣而不是出于教育目的。

1 个答案:

答案 0 :(得分:4)

没有。 C函数由名称和正文组成。编译器将正文转换为二进制可执行代码段,当从可执行文件创建进程时,该代码将映射到某个地址。该名称由静态和动态链接器用作此地址的别名。

在运行时,这两个概念并没有太大的兴趣。加载了可执行文件并解析了名称,因此动态创建它们几乎没有用。

在iOS上,甚至不可能创建新的函数实现,因为内核不允许使内存可执行。