statische library linken

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • statische library linken

    Hallo!

    Ich verzweifle gerade an XCode 6.2 und brauche eine kleinen Schubs in die richtige Richtung.

    Habe zwei Projekte: Das erste erzeugt eine statische Lib, was weiter kein Problem ist. Das zweite soll diese Lib nun einbinden und zwar jeweils mit unterschiedlichen Pfaden für Debug und Release. Deshalb kann ich die Lib nicht über "Library hinzufügen" reinholen.

    Folgendes soll offiziell gehen:
    - in den "build settings / other linker flags" die zu linkende Lib angegeben z.B. -lmylib.a
    - in den "build settings / search paths" sowohl die Libpfade als auch die Userheaderpfade angegeben

    Ergebnis:
    ld: library not found for -lmylib.a
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    Die Meldung stimmt aber so nicht ganz. Denn wenn ich die Lib gar nicht dazulinke dann erscheinen die ganzen Meldungen von den unbekannten Funktionsaufrufen. Also findet er die lib zwar aber es stört etwas anderes.

    Weiß jemand vielleicht wie es richtig geht ?

    Besten Dank im Voraus!
  • Thomas schrieb:

    Weiß jemand vielleicht wie es richtig geht ?
    Ich würde es mit einem Workspace lösen.
    1. Workspace anlegen
    2. Die beiden Projekte in den Workspace ziehen
    3. In den Targeteinstellungen für die Anwendung
      • Die Library zu den zu linkenden Libraries hinzufügen (Build Phases)
      • In den Build Settings unter „Header Search Paths“ das $(TARGET_BUILD_DIR) hinzufügen (rekursiv)
      • In den Build Settings unter „Library Search Paths“ das $(TARGET_BUILD_DIR) hinzufügen
    4. In den Targeteinstellungen für die Library
      • Die Header „Public“ machen (Build Phases)
    In Xcode öffnest du dann zum Arbeiten an dem Projekt immer den Workspace.
  • Danke! Ohne "lib" gehts heute :)
    Zumindest teilweise. Denn ich erzeuge auch im zweiten project wieder eine lib, die die andere enthält. Das geht nur wenn die zweite lib eine static lib wird. Bei der dynamic lib gehts nicht. Um sicher zu gehen habe ich für die dynamische variante ein neues project angelegt aber die fehlermeldung bleibt wie eingangs beschrieben. Noch ideen ?
  • Nach weiteren Versuchen habe ich herausgefunden, dass es nur geht wenn die zu inkludierende Lib in den Build Phases hinzugefügt wird. Dort wähle ich die Debug-Lib aus und setze dann in den Build Settings den Library-Search-Path-Release und auf die Release-Lib. Dann wird beim Debug-Build die Debug-Lib hinzugelinkt und im Release-Build die Release-Lib.