lukeh
(Luke Howard)
1
I'm using Swift 5.10 on Ubuntu. After adding .interoperabilityMode(.Cxx) to the Swift settings, the Swift compiler is no longer able to find in_addr or sockaddr_in in scope. Any ideas? Importing Glibc doesn't help.
There are some issues with the C and now C++ modulemaps used by the Swift compiler and their layering, that have slowly been iterated on but still have issues like this. I suggest you file a compiler issue and tag one of the C++ Interop people on it.
lukeh
(Luke Howard)
3
So if I try something like:
public typealias in_addr = in_addr_t
which is deliberately wrong, I get the error:
error: value of type 'in_addr' (aka 'UInt32') has no member 's_addr'
which suggests that the header file is being imported, just somehow the struct definition is ignore (header snippet below).
/* Internet address. */
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};
lukeh
(Luke Howard)
4
This gets the package compiling with C++ interop enabled but still breaks on module import into a foreign package. I think I think the most expeditious solution will be just to remove the C++ interop dependency.
import CoreFoundation
public typealias in_addr = CoreFoundation.in_addr
public typealias sockaddr_in = CoreFoundation.sockaddr_in
1 Like