3 votes

Comment utiliser ma bibliothèque statique (.a) en swift 3

Je veux construire et utiliser une bibliothèque statique (.a) en swift 3. exemple : je construis une lib helloLib.a, et l'utilise.

hello.c

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

hello.h

#include 
int printHello();

construire : libHello.a et copier dans /usr/local/lib

Code swift

module.modulemap

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

Package.swift

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

utiliser le module hello

main.swift

import hello

printHello()

construire avec swift (commande): swift build

obtenir une erreur :

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

1voto

OmniProg Points 1281

Je pense que vous avez omis beaucoup d'informations sur ce que vous avez fait, ce qui rend difficile de fournir une réponse avec certitude. Avez-vous fait quelque chose dans le domaine de https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md? Quelle est votre structure de répertoire? Où se trouve hello.h?

Quoi qu'il en soit, en jugeant par le message d'erreur, un problème est que vous utilisez

   link "libhello"

dans module.modulemap. Il n'est pas clair quel est le nom de la bibliothèque statique. Il ne peut pas s'appeler helloLib.a, son nom doit commencer par lib. S'il s'appelle libhelloLib.a, alors dans le plan de module il doit être

link "helloLib"

Vous voudrez peut-être également ajouter l'option -Xlinker -L/usr/local/lib comme suggéré dans une autre réponse.

J'espère que cela vous aidera.

0voto

Je pense que le fichier de bibliothèque statique n'est pas trouvé dans /usr/local/lib. Vous devriez compiler avec des indicateurs de compilateur tels que :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X