2009-12-10 8 views
7

Nehmen wir an, Sie möchten die Boost- "Getting Started" -Beispiele erstellen und diese mithilfe eines Xcode-Projekts verknüpfen, anstatt sie in der Befehlszeile zu erstellen. Sie versuchen die Option nur für Header, und es funktioniert gut.Wie erstelle ich die Boost "Getting Started" Beispiele mit XCode?

Aber dann nehmen Sie das Beispiel Quelle:

#include <boost/regex.hpp> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string line; 
    boost::regex pat("^Subject: (Re: |Aw:)*(.*)"); 

    while (std::cin) 
    { 
     std::getline(std::cin, line); 
     boost::smatch matches; 
     if (boost::regex_match(line, matches, pat)) 
      std::cout << matches[2] << std::endl; 
    } 
} 

Und Sie wie folgt vor:

  1. die Boost-Bibliotheken bauen ./bjam
  2. öffnen Xcode installieren verwenden und eine neue C++ erstellen Befehlszeilen-Dienstprogramm-Projekt.
  3. Drag libboost_regex.dylib in die Produkte Ordner in den Gruppen & Dateien treeview (Überprüfung der Option, die sie kopieren Sie die Datei erlaubt)
  4. die Projektoptionen so einstellen, dass die Header-Suchpfade zeigt auf den Boost-Ordner
  5. Bauen umfassen und führe das Projekt aus!

Leider, wenn Sie die Konsole geöffnet haben (Run | Console) Sie gehen einen Fehler zu sehen, dass es nicht die dylib finden:

dyld: Library not loaded: libboost_regex.dylib 
    Referenced from: /Users/matt/Documents/Boost/test/GettingStarted/build/Debug/GettingStarted 
    Reason: image not found 

also keinen besseren Weg, zu wissen, Um Xcode dazu zu bekommen, kopierst du die Dylib in dein_Projekt/Build/Debug/und es läuft! Hurra!

Detail-orientiert Person, die du bist, du ein paar Sachen in Standard-in geben, um es auszuprobieren:

> Subject: foo bar baz 
> foo bar baz 

Und dann Segfaults es.

Program received signal: “EXC_BAD_ACCESS”. 

ACK!

Aber keine Angst. Ich weiß, was das Problem ist! Und wenn mich niemand dazu schlägt, poste ich die Lösung nach dem Mittagessen.

Antwort

2

Das Problem hier ist, dass die Standard-Build von Boost nicht gut mit Debug Build Ihres Projekts spielt. Sie müssen boost bauen die Debug-Variante verwenden, die wie dies geschehen ist:

./bjam install variant=debug define=_GLIBCXX_DEBUG --with-regex 

_GLIBCXX_DEBUG ist eigentlich die Option in dem Xcode-Projekt, das den Konflikt verursacht.

Dann können Sie die Debug-Version der Bibliothek mit Ihrem Debug-Xcode-Projekt verknüpfen. (Ich denke, so werden die vorkompilierten MacPorts-Binärdateien hergestellt.)

Denken Sie daran, dass Sie die bjam-Variante verwenden können, um mehrere Ziele gleichzeitig zu erstellen.

Außerdem: Wenn es nach der Neuerstellung nicht funktioniert, überprüfen Sie, ob die Version der Bibliothek, mit der Sie verlinken, tatsächlich die ist, die Sie gerade neu erstellt haben!

Außerdem: Es könnte stattdessen funktionieren, die _GLIBCXX_DEBUG-Definition aus Ihrer Debug-Konfiguration zu entfernen. Doppelklicken Sie unter Ziele auf Ihre ausführbare Datei, um die Projektoptionen zu öffnen, und entfernen Sie dann _GLIBCXX_DEBUG aus den Präprozessor-Makros.

Hoffe, das hilft.

1

Ich hatte den gleichen Fehler. Ich habe vergessen, eine Build-Phase "Copy Files" zu erstellen und das Framework zu kopieren.

Sehen Sie sich das auf die erste Schaltfläche im Projektnavigator Ihre Dateien

Klicken Sie auf Ihr Projekt zu zeigen, die Projekteinstellungen bearbeiten das Ziel Klicken Sie, dass Sie die Boost-lib in verwenden Klicken Sie auf die Schaltfläche „Hinzufügen Build-Phase“ Schaltfläche in der rechten unteren Ecke „Kopieren von Dateien hinzufügen“ wählen Sie die „Destination“ ändern Sie im Popup auf „Frameworks“ Ziehen Sie den libboost_regex.dylib aus dem Projektnavigator zum Kopieren von Dateien Tabelle

der Link Bild ist nicht funktioniert so für Screenshots: http://imgur.com/a/8ojye#6

+0

Ich nehme an, dass, wenn die Kopie nicht geschieht, kann es eine andere (nicht debuggen) Version der Bibliothek verknüpfen, die erklären würde, warum das Hinzufügen des Kopierschritts es behebt. –

Verwandte Themen