J'essaie d'inclure une bibliothèque statique tierce partie dans mon projet Swift. J'ai ces deux fichiers, parmi quelques autres.
GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a
J'ai ajouté le fichier .a
à la section "Frameworks and Library" de la cible. J'ai ensuite créé un fichier module.map
dans mon projet, comme ceci:
module GoogleConversionTracking {
header "../../Libs/GoogleConversionTrackingSDK/ACTReporter.h"
export *
}
Et dans les fichiers Swift, je peux maintenant y faire référence:
import GoogleConversionTracking
Mais je reçois une erreur au moment du lien:
ld: bibliothèque introuvable pour -lGoogleConversionTracking
clang: error: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)
remarque: bibliothèque introuvable pour -lGoogleConversionTracking
Comment réparez-vous ceci? J'aimerais ne pas utiliser d'en-tête de pontage, mais plutôt utiliser ces fichiers de définition de module, si possible.
La carte du module est mon synonyme de problème! Les en-têtes de pontage sont nuls, mais ils fonctionnent dans la plupart des cas. Quoi qu'il en soit, assurez-vous de:
Swift_INCLUDE_PATHS
- une liste de chemins sur lesquels le compilateur Swift doit rechercher des modules Swift supplémentaires. Cela indique à Xcode où se trouvent vos cartes de module.LIBRARY_SEARCH_PATHS
- il s'agit d'une liste de chemins d'accès aux dossiers dans lesquels l'éditeur de liens doit rechercher les bibliothèques utilisées par le produit. Xcode doit toujours savoir où se trouvent les fichiers binaires de vos modules.En outre, vous souhaiterez probablement utiliser l'en-tête de parapluie, et pas seulement l'en-tête, voir documentation . Je suggérerais également d'utiliser l'extension modulemap
, sans savoir si module.map
fait la différence, mais c'est ainsi que je me souviens de l'avoir vue et utilisée dans la plupart des projets.
Omar Abdelhafith a un blog blog méchant sur ce sujet et il est également utile de voir comment les autres le font quand ils traitent de ce genre de choses.