MacOS - comment lier une bibliothèque dynamique avec un chemin relatif en utilisant gcc / ld

Si vous êtes à essayer de comprendre la liaison dynamique, cette question est susceptible de les intéresser.

L'une des réponses à cette question fournit un merveilleux exemple de la création et l'utilisation d'une bibliothèque dynamique. Basé sur lui, j'ai certains fichiers simples:

principal.c:

extern void someFunction (int x);

int main (int argc, char** argv ) {
    someFunction(666);
}

mylibrary.c:

#include <stdio.h>

void someFunction (int x) {
    printf ("\nsomeFunction called with x=%d\n", x);
}

makefile:

main: mylibrary.c main.c
    gcc -c mylibrary.c
    gcc -dynamiclib -current_version 1.0 mylibrary.o -o libmylibrary.dylib
    gcc -c main.c
    gcc -v main.o ./libmylibrary.dylib -o main

clean:
    rm *.o
    rm main
    rm *.dylib

Jusqu'à présent, tout fonctionne très bien. Si je le fais, et puis sur enter ./principal à l'invite de commande, je vois le résultat attendu:

someFunction called with x=666

Maintenant, je veux mélanger les choses un petit. J'ai créé un répertoire hidelib, qui est un sous-répertoire de mon répertoire principal. Et je suis à ajouter une ligne à mon makefile:

main: mylibrary.c main.c
    gcc -c mylibrary.c
    gcc -dynamiclib -current_version 1.0 mylibrary.o -o libmylibrary.dylib
    gcc -c main.c
    mv libmylibrary.dylib hidelib     # this is the new line

clean:
    rm *.o
    rm main
    rm hidelib/*.*

Maintenant, je veux ajouter une autre ligne pour le makefile donc il va trouver libmylibrary.dylib dans le hidelib sous-répertoire. Je veux être en mesure d'exécuter ./principal de la même manière. Comment puis-je le faire?

EDIT: Merci pour la réponse. Avoir beaucoup d'options, c'est merveilleux, mais un débutant veut juste une option concrète qui fonctionne. Voici ce que je suis en train de la dernière ligne, mais clairement je ne comprends pas quelque chose. Le makefile s'exécute sans erreur, mais à l'exécution, il dit "bibliothèque introuvable".

    gcc main.o -rpath,'$$ORIGIN/hidelib' -lmylibrary -o main

source d'informationauteur William Jockusch