2017-09-26 3 views
1

J'essaie d'inclure une bibliothèque statique tierce dans mon projet Swift. J'ai ces deux fichiers, parmi quelques autres.Comment utiliser la bibliothèque statique et le fichier de carte de module avec Swift?

GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a

J'ajouté le fichier .a à la section « Les cadres liés et de la bibliothèque » de la cible. J'ai ensuite créé un fichier module.map dans mon projet, comme celui-ci:

module GoogleConversionTracking { 
    header "../../Libs/GoogleConversionTrackingSDK/ACTReporter.h"  
    export * 
} 

Et dans les fichiers Swift Je peux maintenant s'y référer:

import GoogleConversionTracking 

Mais je reçois une erreur au moment du lien:

ld: library not found for -lGoogleConversionTracking
clang: error: linker command failed with exit code 1 (use -v to see invocation)
note: library not found for -lGoogleConversionTracking

Comment résoudre ce problème? Je ne voudrais pas utiliser un en-tête de pontage, mais plutôt utiliser ces fichiers de définition de module, si possible.

Répondre

0

La carte du module est mon synonyme de problèmes! Les têtes de pontage sont nulles, mais elles fonctionnent seulement dans la plupart des cas. Quoi qu'il en soit, assurez-vous:

  • Configurer SWIFT_INCLUDE_PATHS - une liste de chemins à rechercher par le compilateur Swift pour les modules véloces. Ceci indique à Xcode où sont les cartes de votre module.
  • Configurer LIBRARY_SEARCH_PATHS - il s'agit d'une liste de chemins d'accès aux dossiers à rechercher par le lieur pour les bibliothèques utilisées par le produit. Xcode a toujours besoin de savoir où sont les binaires pour vos modules.

En outre, vous souhaitez probablement utiliser l'en-tête du parapluie, pas seulement l'en-tête, voir documentation. Je suggère également d'utiliser modulemap extension, pas sûr si module.map fait la différence, mais c'est ainsi que je me souviens de voir et de l'utiliser dans la plupart des projets.

Omar Abdelhafith a un méchant blog post sur ce sujet et il aide également à voir how others do it lorsqu'il s'agit de ce genre de choses.