Sie haben nur ein paar Optionen: -L
für Verzeichnisse und -l
für Bibliotheksnamen.
Sie können dies auf einfachste Weise tun, indem Sie sicherstellen, dass die statische Bibliothek, die Sie verknüpfen möchten, anders benannt ist als die dynamische Bibliothek. Andernfalls stellen Sie möglicherweise fest, dass der Linker hilfreich alle Verweise auf gemeinsam genutzte Bibliotheken nach Name und Verknüpfungen zu diese sammelt. Dies ist kein OSX-spezifisches Problem, sondern eine Funktion, die vielen Systemen mit gemeinsam genutzten Bibliotheken gemeinsam ist.
Ein Weg, um sicherzustellen, dass Sie die statische Bibliothek haben, wenn es normalerweise in einem Verzeichnis mit der genannten Bibliothek befindet, ist eine symbolische Verknüpfung in ein temporäres Verzeichnis zu erstellen, und verwenden Sie dass mit -L
.
Etwas wie folgt aus:
MYDIR=$(mktemp -d -t xxxxxx)
ln -sf /usr/local/libfoo.a ${MYDIR}/libfoo.a
clang -o foo -L${MYDIR} -l foo
rm -rf ${MYDIR}
Versuchen Sie, eine .dylib-Datei statisch mit Ihrem Programm zu verknüpfen? – zneak
Die Bibliothek verfügt auch über eine .a-Version. (SDL2 in meinem Fall.) – Arcanelab
Wenn Sie eine Bibliothek mit '-l' nach Clang übergeben, wird der Linker immer die .dylib über die .a-Datei auswählen, wenn es eine gibt. Dies ist ein Apple bekannter Fehler. Sie können es möglicherweise umgehen, indem Sie ein Dummy-Verzeichnis mit einer Kopie der Bibliothek (oder einem Link dazu) zum Bibliothekspfad hinzufügen. – zneak