Аргументы 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)