• hello2.cpp:

    C
    #include <iostream>
    #include <mutex>
    int main()
    {
    std::mutex wait;
    wait.lock();
    std::cout << "Hello Welt\n";
    return 0;
    }

    Die falsche C++ Library scheint der Default zu sein. Als erste würde ich folgendes versuchen:

    Code
    clang++ -v -xc++ '-###' -o hello2 hello2.cpp  -std=c++11 -stdlib=libc++
     ./hello2


    Wenn es nicht geht, würde ich noch als Zusatzparmeter versuchen:-nostdinc++ -I#{opt_lib}/llvm-3.6/include/c++/v1 -L#{opt_lib}/llvm-3.6/lib
    #{opt_lib} gehört durch in Installationpfad ersetzt, was /usr/local/Cellar/llvm36/3.6.2/lib entsprechen sollte. Bei der Installation vom llvm36 sollte der Pfad auch in den Meldungen am Abschluss angezeigt worden sein.

    Damit sollen die richtigen Aufrufparameter für den Compiler feststehen.

    Um zu testen, ob die C++ Libraries bei wxWidgets keine Probleme gibt [eventuell auch mit den weiteren Zusatzparametern:

    Code
    clang++ -o touchtest touchtest.cpp $(wx-config --libs --cxxflags)   -std=c++11 -stdlib=libc++
    ./touchtest


    Mittels "otool -L touchtest" sollte man prüfen, ob die libstdc++ [schlecht] und/oder die libc++ [wenn aus der llvm3.6 Installation, dann gut] verwendet werden.
    Wenn die falschen c++ Libraries verwendet werden, wird es wahrscheinlich zu merkwürdigen Fehlern kommen, daher sollte das Testprogramm vorher nur mit der richten libc++ laufen.

  • Das ist der Output, es wird kein binary erzeugt, ebenso mit den zusätzlichen Parametern.

    Zitat

    david$ clang++ -v -xc++ '-###' -o hello2 hello2.cpp -std=c++11 -stdlib=libc++
    clang version 3.6.2 (tags/RELEASE_362/final)
    Target: x86_64-apple-darwin10.8.0
    Thread model: posix
    "/usr/local/Cellar/llvm36/3.6.2/lib/llvm-3.6/bin/clang" "-cc1" "-triple" "x86_64-apple-macosx10.6.0" "-emit-obj" "-mrelax-all" "-disable-free" "-main-file-name" "hello2.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-mthread-model" "posix" "-mdisable-fp-elim" "-masm-verbose" "-munwind-tables" "-target-cpu" "core2" "-target-linker-version" "97.17" "-v" "-dwarf-column-info" "-resource-dir" "/usr/local/Cellar/llvm36/3.6.2/lib/llvm-3.6/bin/../lib/clang/3.6.2" "-stdlib=libc++" "-std=c++11" "-fdeprecated-macro" "-fdebug-compilation-dir" "/Users/david/hello2" "-ferror-limit" "19" "-fmessage-length" "209" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-10.6.0" "-fencode-extended-block-signature" "-fcxx-exceptions" "-fexceptions" "-fmax-type-align=16" "-fdiagnostics-show-option" "-fcolor-diagnostics" "-o" "/var/folders/u7/u7LFvaCFGoS9G-hh0tfg4k+++TI/-Tmp-/hello2-3e732d.o" "-x" "c++" "hello2.cpp"
    "/usr/bin/ld" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.6.0" "-o" "hello2" "-lcrt1.10.6.o" "/var/folders/u7/u7LFvaCFGoS9G-hh0tfg4k+++TI/-Tmp-/hello2-3e732d.o" "-lc++" "-lSystem"

  • Die -L passt nicht. Kannst du unter /usr/local/Cellar/llvm36 nach einer libc++ Library (Name enthält auch.dylib) suchen. Der Pfad bei -L muss das entsprechende Verzeichnis sein.

    PS:
    Es wird nach "$(INSTALL_DIR)/usr/lib" ein libc++.dylib installiert. INSTALL_DIR sollte ein Verzeichnis unter /usr/local/Cellar/llvm36 sein.

  • Ohne ein bischen Schummel wird das Problem nicht lösbar sein.

    Zuerst tauchen wir die Symlinks für clang/clang++ durch 2 kleine Shellskripts:

    /usr/local/bin/clang++:

    Bash
    #!/bin/sh
    exec /usr/local/bin/clang++-3.6 -stdlib=libc++ -nostdinc++ -I /usr/local/Cellar/llvm36/3.6.2/lib/llvm-3.6/include/c++/v1/ -L /usr/local/Cellar/llvm36/3.6.2/lib/llvm-3.6/usr/lib/ $*

    /usr/local/bin/clang:

    Bash
    #!/bin/sh
    exec /usr/local/bin/clang-3.6 -stdlib=libc++ -nostdinc++ -I /usr/local/Cellar/llvm36/3.6.2/lib/llvm-3.6/include/c++/v1/ -L /usr/local/Cellar/llvm36/3.6.2/lib/llvm-3.6/usr/lib/ $*

    chmod nicht vergessen:

    Code
    chmod a+x /usr/local/bin/clang /usr/local/bin/clang++

    Danach sollte man ohne weiter Parameter (abgestehen von eventuell -std=c++11) clang mit der neuen libc++ nutzen können. Das kann man anhand der diversen hello*.c* testen.

    Um das Superenv beibringen zu können, müssen wir brew leicht modifizieren:

    Nach

    Code
    arg0=$1
    shift


    in Library/ENV/4.3/xcrun fügen wir noch ein:

    Code
    if [ "$arg0"  == clang ]; then
      exec /usr/local/bin/clang $@
    fi
    if [ "$arg0"  == clang++ ]; then
      exec /usr/local/bin/clang++ $@
    fi

    libtiff/wxmac wird man mit den selben Parameter wie vohrer neu kompilieren müssen. Hoffentlich funktioniert dann das Umwandeln und starten von touchtest

  • Also ich habe jetzt libtiff und wxmac recompiliert.
    Dann touchtest übersetzt mit

    Zitat

    clang++ -o touchtest touchtest.cpp $(wx-config --libs --cxxflags)


    Das hat funktioniert.
    Dann habe ich make clean, rm CMakeCache.txt und anschließend

    Zitat

    cmake -G "Unix Makefiles" -DUNICODE=1 . -DCMAKE_CXX_COMPILER=/usr/local/bin/clang++ -DCMAKE_CXX_FLAGS=-g -DCMAKE_C_FLAGS=-g -DDOCBOOK_DIR=/usr/local/Cellar/docbook-xsl/1.78.1/docbook-xsl -DCMAKE_C_COMPILER=/usr/local/bin/clang

    Soweit richtig?

    Das anschließende 'make' wirft nämlich recht bald 12 Fehler.

  • Sieht korrekt aus.

    Wenn du den Output sammelst, lösche CMakeCache.txt, dann führe cmake aus und lege auch dessen Output bei.
    Mach dann ein "make VERBOSE=1". Von desen Output ist der Anfang [falls dort wieder ein cmake vom make gestartet wird - das wäre das Resultat, wenn das erste cmake schief gegangen ist] und das Ende [mindestens inkl letzten clang Aufruf] wichtig.

    Hast du mit "otool -L touchtest" bei touchtest gecheckt, ob nur libc++ und nicht mit libstdc++ als Library gelistet wird?