[swift-users] Is it possible to compile swift code to dynamic library?

Slava Pestov spestov at apple.com
Tue Jan 10 00:58:39 CST 2017


Right now, we don’t have an ‘official’ way to expose Swift APIs to C. However there is the completely unsupported and subject to change or removal at any time @_cdecl attribute. Eg,

@_cdecl(“bar_foo") public func foo(x: Int) -> Int { return x }

This defines a function callable from C as:

extern int bar_foo(int x);

I don’t suggest using this for anything serious because it has some known problems and it’s going to change before it’s final (hence it’s undocumented, underscored status).

If someone wants a starter project, finishing off @_cdecl (and getting it through swift-evolution) would be really cool. My understanding is that the main thing lacking is untangling some of the diagnostics code to consider C and Objective-C separately, since C is more restrictive. We could even add support to PrintAsObjC for generating pure-C “bridging headers”. :-)

As for actually building a shared library, that depends on if you’re using Xcode or command line, Mac or Linux, etc. If you’re on the command line take a look at the -emit-library flag to the swiftc driver.

Slava

> On Jan 9, 2017, at 5:57 PM, Zheng Ping via swift-users <swift-users at swift.org> wrote:
> 
> I want to compile swift code to dynamic library, and I can link this dynamic library to my C project. I don't know whether is it possible? Or whether I can do this in the future?
> 
> -- 
> with kind regards
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users



More information about the swift-users mailing list