Call swift from c

Call swift from c

本文关键字:from swift Call      更新时间:2023-10-16

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

我正在尝试使用 g++ 或 clang(++( 来编译和链接原生 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

所以基本上我有两个问题,可以做到吗,怎么做?John。

感谢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

感谢

提示