如何在swift 3中使用我的静态库(.a)

时间:2016-10-02 15:22:42

标签: c swift static-libraries

我想在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个命令失败

2 个答案:

答案 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