我想在swift 3中建立并使用静态库(.a)。例如:我构建一个 lib helloLib.a,并使用它。
的hello.c
#include <stdio.h>
#include "hello.h"
int printHello()
{
printf("hello wourl");
return 0;
}
hello.h
#include <stdio.h>
int printHello();
构建到:libHello.a并复制到/ usr / local / lib
代码迅捷
module.modulemap
module hello [system] {
header "hello.h"
link "libhello"
export *
}
Package.swift
import PackageDescription
let package = Package(
name: "hello",
dependencies: []
)
使用模块hello
main.swift
import hello
printHello()
用swift(命令)构建:swift build
收到错误:
编译Swift模块'usehello'(1个来源)
链接./。build / debug / usehello
ld:找不到-llibhello for architecture x86_64的库
:0:错误:链接命令失败,退出代码为1(使用-v查看调用)
:0:错误:构建有1个命令失败
答案 0 :(得分:1)
我认为你已经省略了很多关于你所做的事情的信息,这使得很难确定答案。您是否按照https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md的方式做了些什么?你的目录结构是什么? hello.h在哪里?
无论如何,从错误消息判断,一个问题是你使用
link "libhello"
module.modulemap
中的。目前还不清楚静态库的名称是什么。它不能被称为helloLib.a
,其名称必须以lib
开头。如果它被称为libhelloLib.a
,那么在模块映射中它必须是
link "helloLib"
您可能还想按照另一个答案中的建议添加-Xlinker -L/usr/local/lib
选项。
希望这有帮助。
答案 1 :(得分:0)
我认为它没有在/ usr / local / lib中找到您的静态库。您应该使用编译器标志构建,例如:
swift build -Xcc -I/usr/local/include -Xlinker -L/usr/local/lib