簡體   English   中英

命令行 Swift 測試出現奇怪的鏈接錯誤(可能是 Swift Package 管理器相關)

[英]Strange Link Error With Command-Line Swift Test (May Be Swift Package Manager-Related)

我正在開發一組相互關聯的 SPM 模塊作為測試/演示,我遇到了一個奇怪的 linker 錯誤。

此示例中出現問題,該示例具有如下所示的Package.swift文件:

import PackageDescription

let package = Package(
    name: "Package_C",
    platforms: [
        .iOS(.v11),
        .tvOS(.v11),
        .macOS(.v10_14),
        .watchOS(.v5)
    ],
    products: [
        .library(
            name: "Package-C",
            type: .dynamic,
            targets: ["Package_C"])
    ],
    dependencies: [
        .package(name: "Package_A", url: "git@github.com:LittleGreenViper/SPMArticle-Package_A.git", from: "1.0.0")
    ],
    targets: [
        .target(
            name: "Package_C",
            dependencies: [
                .product(name: "Package-A", package: "Package_A")
            ],
            path: "src"
        ),
        .testTarget(
            name: "Package_CTests",
            dependencies: [
                "Package_C"
            ],
            path: "test"
        )
    ]
)

package 與swift build良好,從 Xcode 運行時一切正常。

當我運行swift test時會發生此問題。 我收到以下錯誤:

Undefined symbols for architecture x86_64:
  "_$s9Package_CAAV6indentABSi_tcfC", referenced from:
      _$s14Package_CTests4testC0C7QuicklyyyFSSyKXEfu_ in Package_CTests.swift.o
ld: symbol(s) not found for architecture x86_64
[4/5] Linking Package_CPackageTests

看起來Package_C沒有被鏈接,但一切似乎都是絕對的(另外,請記住,其他一切都很好swift test是唯一失敗的地方)。

應該注意的是,這個項目運行良好,並且幾乎完全相同。

我能看到的唯一區別是目錄的命名約定。 我真的很討厭這個問題,但接下來我會解決這個問題。

誰能看到我看不到的東西?

編輯添加:我應該注意到靜態/動態的東西似乎不是問題。 即使我將Package_C更改為 static,我也會遇到同樣的錯誤。

啊。 看起來問題是需要遵循命名約定。

我從這個切換:

在此處輸入圖像描述

對此:

在此處輸入圖像描述

它開始工作了。 沒有文件內容(除了從Package.swift文件中刪除兩個path arguments 之外)被更改。

這是新的 Package.swift 文件

// swift-tools-version:5.2

import PackageDescription

let package = Package(
    name: "Package_C",
    platforms: [
        .iOS(.v11),
        .tvOS(.v11),
        .macOS(.v10_14),
        .watchOS(.v5)
    ],
    products: [
        .library(
            name: "Package-C",
            type: .dynamic,
            targets: ["Package_C"])
    ],
    dependencies: [
        .package(name: "Package_A", url: "git@github.com:LittleGreenViper/SPMArticle-Package_A.git", from: "1.0.0")
    ],
    targets: [
        .target(
            name: "Package_C",
            dependencies: [
                .product(name: "Package-A", package: "Package_A")
            ]
        ),
        .testTarget(
            name: "Package_CTests",
            dependencies: [
                "Package_C"
            ]
        )
    ]
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM