我知道在 swift 中可以使用 swift 模块中函数的
@_silgen_name
attr 与 c 进行互操作。有没有办法使用汇编文件中定义的符号来执行此操作?我想使用 Swift 进行系统调用。这就是我问的原因。
要么使用 Objective-C 创建一个包含函数原型的桥接头文件(通常命名为
MyProject-Bridging-Header.h
),要么使用 Swift 的 @_silgen_name
属性来实现相同的效果。
例如,给定您的汇编代码:
.globl _add // ensure that the symbol can be found
...
_add: // int add(int a, int b)
movl %esi, %eax
addl %edi, %eax
ret
您可以将其放入桥接头文件中:
int add(int a, int b);
或者,您可以在 swift 模块的顶层执行此操作:
@_silgen_name("add") func add(a: Int32, b: Int32) -> Int32
无论采用哪种方法,您都可以像调用任何其他函数一样在 Swift 中调用该函数:
let a = add(1, 2);