从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)

我知道在swift中,可以在swift模块中的函数上使用
@\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