从swift调用程序集中定义的函数
我知道在swift中,可以在swift模块中的函数上使用从swift调用程序集中定义的函数,swift,swift2,Swift,Swift2,我知道在swift中,可以在swift模块中的函数上使用@\u silgen\u nameattr与c进行互操作。是否有方法使用部件文件中定义的符号执行此操作?我想使用Swift进行系统调用。这就是我问的原因。创建bridge header.h文件,并将函数原型放在该文件中 例如,您的汇编代码: .globl _add // make it global so that others can find this symbol .... _add: // int add(int a, int b)
@\u silgen\u name
attr与c进行互操作。是否有方法使用部件文件中定义的符号执行此操作?我想使用Swift进行系统调用。这就是我问的原因。创建bridge header.h文件,并将函数原型放在该文件中
例如,您的汇编代码:
.globl _add // make it global so that others can find this symbol
....
_add: // int add(int a, int b)
movl %esi, %eax
addl %edi, %eax
ret
然后在桥接头.h文件中
int add(int a, int b);
或
在swift模块顶部定义此项
@_silgen_name("add") func add(a: Int32, b: Int32) -> Int32
然后在swift中,您可以使用它:
let a = add(1, 2);
已编译的对象文件不知道它是否是从C编译的,或从汇编语言汇编而来。@PaulGriffiths编译swift模块时,编译器如何知道asm文件中的符号在哪里?其方式与使用C源文件知道符号在哪里完全相同-它在目标文件的符号表中查找符号。@PaulGriffiths但我没有告诉编译器链接信息技术有什么特别的旗帜需要我传递吗?可能会有帮助。我应该向swiftc编译器传递哪些标志来链接程序集文件?只需放入相同的XCode项目。然后尝试此
swiftc-import-objc header add.h app.swift add.o-o app
其中add.h包含头,add.o是编译的程序集代码。谢谢,你们知道该由谁来编译程序集吗?因为我似乎在clang中找不到任何标志来编译程序集。我尝试了clang-S-mllvm--x86 asm syntax=intel add.S
这就是我尝试的g++-c main.S
。你能试试llvm-g++-cmain.s
?