Fehler beim umstellen von VS2008 zu VS2010



  • Hallo

    Wenn ich mein Projket das unter VS2008 lauffähig war unter VS2010 kompiliere erhalte ich Linkerfehler, 116 an der Zahl.

    Im Grunde sind es aber nur 2 unterschiedliche:

    1. error LNK2038: Konflikt ermittelt für "_ITERATOR_DEBUG_LEVEL": Der Wert "2" stimmt nicht mit dem Wert "0" in ...

    2. error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

    -> hierzu sei gesagt, eingestellt ist: MFC in einer statischen Bibliothek verwenden. Dies sollte auch so bleiben.

    Kann mir jemand helfen, was muss ich umstellen. Irgendwie finde ich im Netz keine passende Antwort.



  • Stell auf die statisch gelinkte CRT um und schmeiss alle #define _ITERATOR_DEBUG_LEVEL aus deinen Projekten raus.



  • Vermutlich linkst Du eine LIB dazu, die noch nicht mit VS2010 überstzt wurde. Übersetze auch *alle* LIBs mit VS2010!



  • Hallo hustbaer

    Mit statisch gelinkter CRT meinst du doch: "MFC in einer statischen Bibliothek verwenden." Das habe ich ja. Was anderes wo man auf statisch umstellen kann habe ich nicht gefunden.

    Die _ITERATOR_DEBUG_LEVEL includes sind ja alle im std namespace wie algorithm, array, deque, usw. Da kann ich ja nicht rauslöschen.



  • Was ich dazu linke ist boost. Ok dann muss ich das übersetzen. Wie stell ich das nun wieder an?



  • Ok. Das wäre geschaft. Nun habe ich allerdings noch mehr Fehler. Die bisherigen sind noch da + neue Linker Fehler.

    Ich bin mit meinem Latein am ende. Noch irgendwelche Vorschläge?



  • Hallo Mig235,

    bevor Du die neue Libs kompilierst, müssen alle Projekte bereinigen werden, d.h.
    alle obj müssen dadurch gelöscht werden, die Pfade auf Librarys und include Dateien überprüfen. usw.

    Viele Grüße.



  • Hallo

    Habe nun schon zum x-ten mal bereinigt und neu erstellt. Erhalte immer die selben Warnungen.



  • Hallo nochmals

    Habe bisher immer mit "Batch erstellen -> Alles neu erstellen" mein Projekt kompiliert. Hierbei sind die ganzen Linker fehler aufgetretten.

    Nun habe ich mal die Projektmappe einzeln einmal als Release und einmal als Debug neu erstellt. Und da sind jeweils keine Fehler aufgetretten.

    Darauf hin habe ich mir mal den Dialog Batch erstellen genauer durchgesehen. Hier ist mir nun aufgefallen dass bei 2 Projekten bei einer exe und einer DLL eine zusätzliche Konfigurationen "Template" zu "Release" und "Debug", vorhanden ist.

    Für was ist die? Aber auch wenn ich diese nicht mit erzeuge erhalte ich meine Fehler!



  • auch für boost? soweit ich mich errinern kann, muss man für dem boost den VS version setzen.



  • ? kann ich jetzt nicht nachvollziehen.

    Und wie gesagt nur wenn ich Batch erstellen mache bekomme ich die Fehler. Wenn ich einzeln übersetze bekomme ich keine Fehler. Muss also irgendwo anders liegen.

    Hatte dieses Phänomen noch niemand?



  • Kann mir zumindest mal jemand sagen was die zusätzliche Buildkonfiguration Template macht. Wie kann man die löschen und kann die was mit meinem Problem zu tun haben?



  • Hallo

    Wo sind denn all die Experten. Was muss ich denn noch machen?



  • Vielleicht hast du bei Debug und Release irgendwo die selben Pfade stehen, wo unterschiedliche Pfade hingehören.
    Also z.B. Verzeichnisse für die ganzen Temp-Files, Output-Pfade etc.



  • Hallo mig235,

    diese unnützen Template Konfigurationen macht VS2010 manchmal beim konvertieren der Projekte. Ist IMHO ein Bug. Leider kann man die Dinger nicht in VS2010 löschen. Du musst also das Projektfile am besten mit einem XML Editor bearbeiten.

    Herzliche Grüsse
    Walter



  • Hallo weicher

    Danke dir. Das habe ich in der Zwischenzeit gemacht. Die Fehler erhalte ich trotzdem weiterhin. Was ich immer noch nicht verstanden habe. Wieso funktioniert das ganze wenn man Release und Debug einzeln bildet.



  • Hallo hustbear.

    Ausgabeverzeichnisse sind auch alle richtig gesetzt. Hier wird das Makro $(Configuration)\ verwendet.



  • Hallo mig235,

    ich hatte so was ähnliches auch schon mal. Da wurden die obj Files von Release und Debug in das gleiche Verzeichnis geschrieben.

    Versuch mal folgendes:
    - Lösche das Debug und Release Verzeichnis
    - mach einen Debug Build
    - kontrolliere wohin die Dateien gespeichert werden
    - Lösche das Debug und Release Verzeichnis
    - mach einen Release Build
    - kontrolliere wohin die Dateien gespeichert werden

    Danach musst Du die Property Sheets so anpassen, dass alles an die richtige Stelle gespeichert wird. Das ist ein wenig Knobelarbeit, aber wenn man das mal gemacht hat, dann versteht man die Systematik der Property Sheets.

    Herzliche Grüsse
    Walter



  • Hallo Walter.

    Danke für deine Hilfe. Das hat mich nun ein Stück weitergebracht.
    Also erstmal: Die Dateien werden an die Richtige Stelle geschrieben. Also wenn ich eine Debug bilde landen die Dateien auch im Ordner Debug selbes Verhalten bei Release. Also das passt.

    Doch was ich feststellen musste: Wenn ich Release bilde versucht er zwei Libs aus dem Debug Ordner zu laden. Diese findet er nun nicht da ich ja den Ordner debug zuvor gelöscht habe. Das scheint dann mein Problem zu sein. Denn wenn die Dateien vorhanden sind lädt er sie und dann erhalte ich die Linker fehler.

    Doch woran ich jetzt noch hänge.
    In den Einstellungen beim Linker steht unter Allgemein:

    Zusätzliche Bibliotheksverzeichnisse: $(OutDir)
    

    und das verweißt jeweils auf den richtigen Ordner. Wo muss ich noch suchen.


  • Mod

    Klick mal auf das Projekt, rechte Maustaste, References.

    Was ist dort eingetragen?
    - Lösche alle hier eingetragenen References raus.
    - Setze die Build Order neu
    - Defineiere alles über die Linker-Optionen (was Du schon getan hast)

    PS: Vorher Kopie Deiner Solution und Projektdateien.


Log in to reply