从 c 调用 swift

Call swift from c

我看到有人使用来自 android 的 swift 代码,使用 @_cdecl swift 函数。我可以使用 swiftc -emit-object 编译为本机,但是当尝试 link 时,我无法让 linker 正常工作..

我正在尝试使用 g++ 或 clang(++) 来编译 link 原生 swift 对象,有人已经成功完成了吗?

我得到的错误如下:

Undefined symbols for architecture x86_64: 

"__T0S2SBp21_builtinStringLiteral_Bw17utf8CodeUnitCountBi1_7isASCIItcfC", referenced from:
      __T04main4testyyF in main.o
"__T0SSN", referenced from:
      __T04main4testyyF in main.o
"__T0s27_allocateUninitializedArraySayxG_BptBwlFyp_Tgq5", referenced from:
      __T04main4testyyF in main.o
"__T0s5printySayypGd_SS9separatorSS10terminatortF", referenced from:
      __T04main4testyyF in main.o
"__T0s5printySayypGd_SS9separatorSS10terminatortFfA0_", referenced from:
      __T04main4testyyF in main.o
"__T0s5printySayypGd_SS9separatorSS10terminatortFfA1_", referenced from:
      __T04main4testyyF in main.o
"_swift_bridgeObjectRelease", referenced from:
      __T04main4testyyF in main.o
"_swift_bridgeObjectRetain", referenced from:
      __T04main4testyyF in main.o

所以基本上我有两个问题,可以做到吗?怎么做? 约翰.

比起 amine.ahd 的指针,我链接了 iphoneos 工具链位置而不是 mac osx。

实际上编译了以下命令并让我 运行 一个调用 swift 本机库的 c 程序,即使带有参数(c 端的 char*,swift 上的 UnsafePointer边)。

clang -o m m.o -lshared -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx  -L.

*-lshared 是使用以下命令编译的 libshared.so 库:

clang -shared -o libshared.so main.o -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx

注意 main.o,这是使用以下命令生成的:

swiftc main.swift -emit-object

感谢提示