dynamische lib auf dem MAC



  • Hallo alle zusammen,

    ich programmiere ein Plugin für eine Hauptanwendung (nicht von mir die Applikation). Das funzt über deren API. Ich erstelle eine dynamische bibliothek die vom Hauptprogramm geladen wird. Das erstmal grundsätzlich (obwohl das wohl keinen unterschied machen dürfte für mein Problem).

    Nun habe ich eine externe dynamische bibliothek die ich in meinem Plugin verwenden möchte. Auf windows (VS2010) ist das alles kein problem. Ins Projekt eingebunden, entsprechende header/lib suchpfade gesetzt und die .lib gelinkt. Funzt, kompiliert, alles fein.
    Nun kopiere ich die .dll der bibliothek in das Verzeichnis wo sich die .exe der Hauptanwendung befindet damit diese auch gefunden wird. Alles schick. funzt.

    Auf dem MAC via XCode 4.6 klappt das Erstellen auch super. Ebenfalls suchpfade entsprechend gesetzt, die .dylib der bibliothek als target hinzugefügt. Alles kompiliert, super. Meine .dylib wird weiterhin korrekt erzeugt.

    Und nun zum eigentlichen Problem. Wo gehört die bibliothek's .dylib denn auf dem MAC hin? Habs im Verzeichnis der ausführbaren Datei der Hauptanwendung probiert und auch im Verzeichnis wo meine .dylib liegt aber die Hauptanwendung lädt mein plugin nun nicht mehr (weil er wohl die .dylib der eingebunden bibliothek nicht findet).

    Meine Frage also, wo gehört die hin? Wo muss ein Benutzer meines Plugins die hinkopieren? Ich habe schon etwas recherchiert und bin auf umgebungsvariablen gestoßen...muss da irgendwas gesetzt werden vielleicht? Ich bin absoluter MAC unwissender also bitte verzeiht.

    Bedanke mich schonmal für hilfe
    Katachi



  • Führ mal
    otool -L <deinebinary>
    aus.
    Das sagt dir welche Abhängigkeiten die binary Datei hat bzw. erwartet. Und poste die Ausgabe mal.



  • Hallo danke erstmal. Dies ist die Ausgabe:

    /Users/navie/Library/Preferences/Main/plugins/mytest.dylib:
    /./mytest.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /Users/colli/Development/project/sharedlib/libPPP.dylib (compatibility version 0.0.0, current version 0.0.0)
    libtbb.dylib (compatibility version 0.0.0, current version 0.0.0)
    libtbbmalloc.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

    mytest.dylib ist meine und libPPP.dylib ist die bibliothek die ich verwende. Kann ich daraus jetzt lesen wo die hingehört?

    Thanks!



  • Ok, also der Pfad der da jetzt zu der libPPP.dylib weist, das scheint der Pfad des Entwicklers der Bibliothek zu sein. Ich gehe mal davon aus dass dieser Pfad derjenige ist, wo nach der dylib gesucht wird und das kann ja nu nicht richtig sein 🙂

    Wie kann ich diesen Pfad also nun verändern (z.b. zu libPPP.dylib so dass der User sie einfach mit neben meine dylib werfen kann...)

    Danke!



  • install_name_tool ist dein Freund.



  • Perfekt danke! 🙂



  • hmm, was ist wenn es immer noch nicht funktioniert? 🙄

    Pfad ist korrekt geändert (zeigt mir otool -L an...sitzt jetzt auf /./libPPP.dylib) aber mein plugin wird immer noch nicht erkannt (ohne die dylib gelinkt wird mein plugin im übrigen normal erkannt...es muss folglich daran liegen).

    Irgend eine andere Idee was es sein könnte? 😕



  • Achtung /./foo ist das selbe wie /foo und auf root liegt deine Library sicher nicht.

    standard pfad wo eine lib liegen sollte ist /usr/local/lib



  • Hi,

    danke nochmals für deine Antwort!
    Okay, also ich habe es jetzt geändert so dass meine dylib jetzt nur noch: libPPP.dylib drin stehen hat. Das sollte also das gleiche Verzeichnis sein wie meine dylib
    (ich habe im Finder nach /usr/local/lib gesucht aber fehlanzeige. Der ordner existiert nicht. Auch /usr/local scheint nicht vorhanden)

    Dennoch funktioniert es nicht.. 😕 Selbst wenn ich einen absoluten Pfad verwende der genau zu dem Ordner weist, geht nicht.

    Hmm, was könnte das denn sein? ich habe in den Build einstellungen::Build Phases::Link Binary With Libraries für die bibliothek mal den Modus von Required auf Optional gesetzt. Verständlicherweise lädt mein plugin dann wieder, es liegt also tatsächlich an der bibliothek.

    In der bibliotheks dylib steht im übrigen ebenfalls der Pfad zum Ordner des Entwicklers drin....wo bei mir steht /./mytest.dylib
    Oder ist lediglich der install Pfad der in meiner dylib steht von bedeutung?

    Man, das ist aber auch ein HeckMac 😉



  • Ok, bist mein held. Ich idiot hab natürlich nicht unter usr/lib gesucht. Schwupp, dort rein geworfen und schon gehts.

    Ich bedanke mich für die Hilfe


Anmelden zum Antworten