2010-03-05 9 views
1

lookups Mes paquets .app ressemble à ceci:Ensembles et dylib

MyApp.app/ 
    Contents/ 
     MacOS/ 
      MyApp 
      libA.dylib 
      libB.dylib 
      libC.dylib 
     PlugIns/ 
      PlugIn1.bundle/ 
       ...bundle contents 
      PlugIn2.bundle/ 
       ...bundle contents 

Les deux PlugIn1.bundle et PlugIn2.bundle sont liés contre libA.dylib, libB.dylib et libC.dylib. Les trois dylibs ont des noms d'installation de @ loader_path/libName.dylib. Les bundles, cependant, ne peuvent pas trouver libA.dylib, libB.dylib ou libC.dylib. J'ai essayé de définir l'indicateur -bundle_loader à lier par rapport à l'exécutable principal, mais cela n'a pas aidé. Est-il possible que les bundles recherchent les dylibs à partir du dossier MacOS du package .app sans avoir à les copier dans le bundle?

Répondre

2

Pour obtenir ce travail, je devais changer l'installation nom @ executable_path/libName.dylib

+0

Exactement. Si vous lisez la page de manuel dyld (1), cela devrait expliquer pourquoi: loader_path est le chemin vers le binaire qui contient la commande load (PlugIn1); executable_path est le chemin vers l'exécutable principal du processus (MyApp). Dans la plupart des cas, il est évident que le fichier loader_path /../../../ MacOS/libName.dylib est beaucoup plus compliqué et fragile que executable_path/libName.dylib. (Quand aucun ne semble assez simple, regardez -rpath.) (Désolé d'avoir omis les symboles at, mais je ne sais pas comment les échapper dans les commentaires ...) – abarnert