Аргументы Swiftc в пакете Swift

У меня есть пакет Swift с исполняемой целью, структура проекта выглядит так:

      MySwiftPackage
├── Package.swift
├── Sources
│   └── MySwiftPackage
│       ├── SwiftBridgeCore.swift
│       ├── main.swift
│       └── my_rust_lib.swift
├── bridging-header.h
├── file.json
├── generated
│   ├── SwiftBridgeCore.h
│   └── my_rust_lib
│       └── my_rust_lib.h
└── lib_mac
    └── libmy_rust_lib.a

Этот пакет должен быть связан со статической библиотекой. lib_mac/libmy_rust_lib.aи ссылки с .

В bridging-header.hпросто есть немного #includeк заголовкам в generated.

Чтобы построить этот проект, я запускаю

      swiftc -L lib_mac -lmy_rust_lib \
    -import-objc-header bridging-header.h \
    Sources/LinuxSwiftPackage/*.swift

Это создаст исполняемый файл, который я смогу запустить. Теперь я хочу сделать то же самое, используя swift build, чтобы я мог добавить зависимости.

Я пробовал следующее:

1. В моем , я добавил следующее:
      let package = Package(
    name: "MySwiftPackage",
    dependencies: [],
    targets: [
        .executableTarget(
            name: "MySwiftPackage",
            dependencies: [],
            cSettings: [ 
                .headerSearchPath(".")
            ],
            linkerSettings: [
                .linkedLibrary(":lib_mac/libmy_rust_lib.a")
            ]
        )
    ]
)

Однако это не связывало библиотеку, так как я получил много cannot find type <SomeType defined in the header> in scope

2. Я добавил следующее:
      let package = Package(
    name: "MySwiftPackage",
    dependencies: [],
    targets: [
        .executableTarget(
            name: "MySwiftPackage",
            dependencies: [],
            linkerSettings: [
                .unsafeFlags(["-L lib_mac", "-lmy_rust_lib", "-import-objc-header bridging-header.h"])
            ]
        )
    ]
)

Это приведет к тем же ошибкам.

я тоже пробовал swiftSettingsвместо linkerSettings, это даст мне следующую ошибку: ld: symbol(s) not found for architecture x86_64

3. Я пробовал следующее:

file.json

      {
    "version": 1,
    "sdk": "/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin/swift",
    "toolchain-bin-dir": "/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin",
    "target": "x86_64-apple-macosx",
    "dynamic-library-extension": "lib",
    "extra-cc-flags": [
    ],
    "extra-swiftc-flags": [
        "-L",
        "lib_mac",
        "-lmy_rust_lib",
        "-import-objc-header",
        "bridging-header.h"
    ],
    "extra-cpp-flags": []
}

с Package.swiftэто выглядит так:

      let package = Package(
    name: "MySwiftPackage",
    dependencies: [],
    targets: [
        .executableTarget(
            name: "MySwiftPackage",
            dependencies: []
        )
    ]
)

потом я побежал swift build --destination file.json, with выдаст мне следующую ошибку:

      error: no such module 'Foundation'
import Foundation

Будет ли какой-либо из этих подходов работать с некоторыми изменениями? Или есть другой подход, который должен работать?

Заранее спасибо,
Йонас

PS Я использую macOS (12)

0 ответов

Другие вопросы по тегам