Vous avez seulement quelques options: -L
pour les répertoires et -l
pour les noms de bibliothèques.
Vous pouvez le faire de la manière la plus simple en vous assurant que la bibliothèque statique que vous souhaitez lier est nommée différemment de la bibliothèque dynamique. Sinon, vous trouverez peut-être que l'éditeur de liens rassemble utilement toutes les références aux bibliothèques partagées par leur nom et leurs liens avec ceux. Ce n'est pas un problème spécifique à OSX, mais une caractéristique commune à de nombreux systèmes avec des bibliothèques partagées.
Une façon de vous assurer que vous avez la bibliothèque statique quand il se trouve normalement dans un répertoire avec la bibliothèque du même nom est de construire un lien symbolique dans un répertoire temporaire et utiliser qui avec -L
.
Quelque chose comme ceci:
MYDIR=$(mktemp -d -t xxxxxx)
ln -sf /usr/local/libfoo.a ${MYDIR}/libfoo.a
clang -o foo -L${MYDIR} -l foo
rm -rf ${MYDIR}
Essayez-vous de lier statiquement un fichier .dylib dans votre programme? – zneak
La bibliothèque a également une version .a disponible. (SDL2 dans mon cas.) – Arcanelab
Lorsque vous passez une bibliothèque avec '-l' à Clang, l'éditeur de liens choisira toujours le .dylib sur le .a s'il y en a un. C'est un bug connu d'Apple. Vous pouvez peut-être contourner ce problème en ajoutant un répertoire factice avec une copie de la bibliothèque (ou un lien vers celle-ci) vers le chemin de la bibliothèque. – zneak