Nicht in der Lage, eine Anwendung auszuführen, kompiliert unter OS-X Snow Leopard (10.6.7) auf einem anderen Mac mit OS-X Leopard (10.5.8). libstdc++.6.dylib-Fehler zurückgegeben

Ich versuche ein fertiges C++ Projekt mit C++0x und Oger auf Max OS-X und ich auch eine übertragbarkeit problem zwischen OS-X-Versionen.

Ich habe es geschafft, mein Projekt kompilieren unter Mac OS-X 10.6 (Snow Leopard) mit GCC 4.6.0 (da brauchte ich C++0x). Es war schwer (wahrscheinlich, weil ich eine neue OSX-Benutzer), aber es schließlich kompiliert es ohne Fehler.

I enthalten alle erforderlichen Komponenten, Frameworks, Plugins etc. benötigt in der Anwendung.app-bundle und es tut starten Sie gut auf das Mac-OS-X-10.6

Aber wenn ich übertragen Sie das Projekt auf meinem alten laptop installiert mit Mac OS-X 10.5.8 ich bin nicht in der Lage, um die Anwendung auszuführen.

Wenn ich Doppelklick auf die .app, es zu versuchen, zu starten und schließlich das Symbol verschwindet aus dem Menü bar und das ist alles. Aber wenn ich führen Sie die ausführbare Datei enthalten, in der .app direkt gibt es den folgenden Fehler:

MacBook-2:~ root# /var/root/Desktop/MyProject.app/Contents/MacOS/MyProject ; exit;
dyld: lazy symbol binding failed: Symbol not found: __ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
  Referenced from: /var/root/Desktop/MyProject.app/Contents/MacOS/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre
  Expected in: /usr/lib/libstdc++.6.dylib

dyld: Symbol not found: __ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
  Referenced from: /var/root/Desktop/MyProject.app/Contents/MacOS/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre
  Expected in: /usr/lib/libstdc++.6.dylib

Trace/BPT trap
logout

Hier ist das Programm-bundle-Struktur anzeigen.

MyProject.app

  • Komponenten
    • ... (Ogre-Komponenten)
  • Frameworks
    • Oger.Rahmen
  • MacOS
    • MyProject (executable)
  • Plugins
    • ... (Ogre plugins)
  • Ressourcen
    • ... (Oger .cfg + mein Vermögen)

Sagte ich Cmake zu verwenden, die MacOSX10.5.sdk (in der Cmake-GUI, nicht in der CMakeList.txt):

  • CMAKE_OSX_DEPLOYEMENT_TARGET 10.5
  • CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk

Aber es scheint nicht, etwas zu ändern...


Libstdc++.dylib-Datei, links zu libstdc++.6.0.9.dylib auf dem Mac verwendet, um die Anwendung zu kompilieren in der Erwägung, dass es links zu libstdc++.6.0.4.dylib auf dem Mac verwendet, um zu testen Portabilität.

Aber als ich sagte, dass die MacOSX10.5.sdk ich würde es allerdings verwenden die libstdc++.6.0.4.dylib zur compile-Zeit, so kann es laufen auf dem Mac installiert und mit 10.5

In der Tat das Ziel ist es, läuft auf dem zweiten Mac (und alle Mac mit 10.5+), ohne etwas zu ändern auf Sie. Einfach downloaden und ausführen...

Hat jemand kann sagen, dass mein, was fehlt mir hier ? (Ich fühle mich nicht wirklich fließend mit der OS-X-Methoden und-organisation, also könnte ich verpasst haben, etwas ganz grundlegendes, nicht Angst zu sein, roh ^^).

Wie kann ich festlegen, das gezielte SDK in Cmake ? (Sind die verwendeten Cmake-Befehle nicht ausreichen ?)


Ich verwenden Sie die folgenden kompilieren meines Projekts:

  • Mac-OS-X-10.6.7
  • GCC 4.6.0
  • Cmake 2.8-4
  • Oger 1.7.3

Ich verwende Folgendes um zu testen, das Projekt:

  • Mac OS-X 10.5.8 (es gibt einige dev tools installiert. Ich glaube, ich muss es sagen, falls es stören könnte mit den Anwendungen).

Edit:

Als ich entdeckte, otool hier ist der log zurückgegeben

Valkeas-Mac:MacOS root# otool -L MyProject 
MyProject:
    @executable_path/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre (compatibility version 0.0.0, current version 1.7.3)
    @executable_path/../Components/libOgreTerrain.dylib (compatibility version 0.0.0, current version 1.7.3)
    /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 136.0.0)
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /opt/local/lib/gcc46/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.15.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /opt/local/lib/gcc46/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.19.0)
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.54.0)
    /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 34.0.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.26.0)
Valkeas-Mac:MacOS root# 

Offensichtlich es links zu den gcc46 libstdc++.6.dylib (wohl normal, wie ich denke, diese Datei enthält die C++0x Funktionen der GCC-4.6.0).

Gibt es also keine Lösung ? (-static gibt einen Fehler zurück, dass zu sagen, brauche ich Dynamik...)

  • GCC 4.6.0? Das ist nicht ein compiler ausgeliefert, die von Apple. Versuchen Sie es mit gcc-4.0.1 oder gcc-4.2.1 was sind das nur 2 Versionen von GCC enthalten in Xcode.
  • Ich brauche C++0X, und der Compiler unterstützt von Xcode unterstützt keine C++0x. Das ist, warum ich kompilieren, ohne Xcode und das ist auch der Grund, warum ich ein gcc-version größer als 4.4
  • Dann bist leider du wahrscheinlich kein Glück, bis llvm/Clang unterstützt C++0x.
InformationsquelleAutor Valkea | 2011-06-15
Schreibe einen Kommentar