我想使用Swift軟件包管理器在我的版本中包含一個靜態的 C庫。 Apple's documentation顯示共享庫的過程,但我希望有一種使用靜態的方法。我可以使用swiftc
鏈接靜態庫,所以我希望我能夠使用swift build
來做到這一點似乎是合理的。在Swift軟件包管理器中使用靜態C庫
我有一個小例子問題,它使用一個靜態C庫,其中包含一個用於將兩個數字相乘的函數。 (注:我在Linux上運行斯威夫特3預覽1)
,看起來像這樣的目錄結構:例如
example/
Package.swift
main.swift
.git/
CMult/
Package.swift
module.modulemap
mult.h
libmult.a
.git/
內容/ Package.swift:
import PackageDescription
let package = Package(
name: "example",
dependencies: [
.Package(url: "../CMult", majorVersion: 1)
]
)
內容例如/ main.swift:CMult/Package.swift的
import CMult
let n: Int32 = mult2(3, 5) // "int mult2(int,int)" is in mult.h and libmult.a
print("Result = \(n)")
內容:
項import PackageDescription
let package = Package(
name: "CMult"
)
內容CMult/module.modulemap:
module CMult [system] {
header "./mult.h"
link "mult"
export *
}
現在是,當我運行example$ swift build
,鏈接器與錯誤抱怨的問題, 「在/ usr /斌/勞工處:找不到-lmult」 ,這並不奇怪,因爲它不在那裏,我沒有告訴它在哪裏看。我想要的是在模塊映射中指定-L標誌的一些方法,指定在哪裏查找.a文件(這是我如何鏈接到我的.a與swiftc
)。一個不太理想但可接受的解決方案似乎是將LD_LIBRARY_PATH環境變量設置爲在CMult /中查找,但沒有更改錯誤。
任何想法?謝謝。