我想使用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 /中查找,但没有更改错误。
任何想法?谢谢。