c++ - 从 c 调用 swift

标签 c++ c swift interop

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

我正在尝试使用 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

所以基本上我有两个问题,可以做到吗以及如何做到? 约翰。

最佳答案

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

下面的命令实际上编译并让我运行一个调用 swift native 库的 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

谢谢指点

关于c++ - 从 c 调用 swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48499264/

相关文章:

c++ - DsGetDomainControllerInfo 返回 "Pointer to a pointer variable that receives an array"?我不明白

c++ - vc++ 不再使用基于范围的语法对简单的 for 循环进行矢量化

ios - 如何在渲染后重用 map View

ios - UICollectionViewFlowLayout : collectionView! .contentSize 与 collectionViewContentSize

swift - 在可解码对象上使用 DidSet 或 WillSet

c++ - shared_ptr 和 weak_ptr 失败的小例子

c++ - 遍历多个 vector

c - 使用 Unix 管道读取 infile 并对其进行排序

列出我声明的函数的 C IDE

c - 无法在windows上编译GTK3+程序