2016-10-02 1 views
3

Ich möchte bauen und verwenden statische Bibliothek (.a) in swift 3. Beispiel: ich baue eine lib halloLib.a, und verwenden Sie es.Wie benutze ich meine statische Bibliothek (.a) in swift 3

hello.c

#include <stdio.h> 
#include "hello.h" 
int printHello() 
{ 
    printf("hello wourl"); 
    return 0; 
} 

hello.h

#include <stdio.h> 
int printHello(); 

Build: libHello.a und kopieren Sie das Verzeichnis/usr/local/lib

Code swift

Modul .modulmap

module hello [system] { 
    header "hello.h" 
    link "libhello" 
    export * 
} 

Package.swift

import PackageDescription 
let package = Package(
    name: "hello", 
    dependencies: [] 
) 

Verwendung Modul Hallo

main.swift

import hello 

printHello() 

build mit SWIFT (Befehl): SWIFT build

einen Fehler erhalten:

Compile Swift Module 'usehello' (1 sources)

Linking ./.build/debug/usehello

ld: library not found for -llibhello for architecture x86_64

:0: error: link command failed with exit code 1 (use -v to see invocation)

:0: error: build had 1 command failures

Antwort

1

glaube ich Ihnen eine Menge Informationen über weggelassen haben, was Sie getan haben, was es schwierig macht, eine Antwort mit Sicherheit zur Verfügung zu stellen: Sie sollten mit Compiler-Flags wie zu bauen. Hast du etwas in Richtung https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md gemacht? Wie ist Ihre Verzeichnisstruktur? Wo ist hallo.h?

Wie auch immer, von der Fehlermeldung zu urteilen, ein Problem ist, dass Sie

link "libhello" 

in module.modulemap verwenden. Es ist unklar, wie der Name der statischen Bibliothek lautet. Es kann nicht helloLib.a genannt werden, sein Name muss mit lib beginnen. Wenn es libhelloLib.a genannt wird, dann im Modul Karte muss es sein

link "helloLib" 

Sie auch die -Xlinker -L/usr/local/lib Option wollen, wie es in einer anderen Antwort vorgeschlagen hinzuzufügen.

Hoffe, das hilft.

+0

i libhello.a zu libhelloLib.a umbenennen gefunden und ändern "verlinken halloLib ", kompilieren ist ok. Warnung: ld: warning: Objektdatei (/usr/local/lib/libhelloLib.a(hello.o)) wurde für die neuere OSX-Version (10.11) erstellt als verlinkt (10.10) – duck

0

Ich glaube, es findet Ihre statische Bibliothek nicht in/usr/local/lib.

swift build -Xcc -I/usr/local/include -Xlinker -L/usr/local/lib 
+0

es funktioniert nicht, Fehler: > Bibliothek nicht für -llibhello für Architektur x86_64 .i nicht verstehen „-llibhello“ – duck

Verwandte Themen