Impossibile eseguire il programma se si utilizzano le librerie boost (C ++) nella versione debug su WinXP

StackOverflow https://stackoverflow.com/questions/439840

Domanda

Sto usando boost per diversi progetti C ++. Di recente ho effettuato un aggiornamento (da 1.33.1 a 1.36, presto a 1.37), da allora non posso più eseguire alcun debug-build.

Per essere sicuro che non rimangano altri problemi di progetto, ho creato un progetto di test minimo, che include solo boost.thread e lo utilizza per avviare un metodo. La build di rilascio può essere avviata, la build di debug non può, anche se Dependency Walker mostra che sono state trovate tutte le librerie richieste (ciò significa anche che il CRT di debug MS richiesto si trova nella directory SxS).

All'avvio ottengo solo:

  

Die Anwendung konnte nicht richtig initialisiert werden (0xc0150002).   Klicken Sie auf " OK " ;, um die Anwendung zu beenden.

Il che significa che niente di più che "inizializzazione dell'app" non è riuscita. Una ricerca su Internet porta principalmente a un problema di installazione di MS Office , che consiglia di eseguire una riparazione di WinXP.

Quindi, a parte il setup di riparazione (che penso non aiuterà mentre sto parlando di problemi di debug-dll), qualche idea?

Ah, prima che me ne dimentichi: assolutamente lo stesso codice sorgente non porta ad errori sulla build-machine (cioè, le DLL possono essere registrate, significa eseguite). Quindi è ovviamente un problema di installazione, ma dato che le DLL sono lì e il deambulatore lo trova, cos'altro ho dimenticato?

( modifica ) Bene, non ho ancora risolto il mio problema, ma grazie a deemok sono un passo avanti. Per ridurre i malintesi, fornisco alcuni chiarimenti di seguito:

  • Il programma non viene eseguito sullo sviluppatore -machine
  • Sto lavorando con un installato VS2005 (è un progetto VC ++ 8)
  • Ho usato la configurazione boost di BoostPro , compilato tutte le possibili versioni di build e Ho ricontrollato che sono lì (altrimenti avrei già errori di linker durante la compilazione).
  • e ho ricontrollato ogni angolo della configurazione include / lib / bin che mi viene in mente - dato che boost utilizza il collegamento automatico su Windows, con una convenzione di denominazione speciale, la creazione o l'avvio non sarebbero riusciti, con un messaggio di errore molto più comprensibile.
  • non posso utilizzare collegamento statico , poiché boost.thread richiede un collegamento dinamico per i progetti DLL (forse potrei scherzare qui, ma poiché questo problema sembra verificarsi solo su la mia macchina, non voglio scherzare con questo, dato che sono sicuro che i ragazzi-boost avevano un motivo per piazzare quel check-in in primo luogo)
  • Come ho scritto, ho controllato con Dependency Walker, e dice che va tutto bene.

Attualmente sembra esserci un errore nel boost-dll (forse Manifest errato), lo verificherò.

È stato utile?

Soluzione

Quindi stai usando le librerie preconfigurate di BoostPro? In tal caso, l'ambiente potrebbe in qualche modo essere leggermente diverso da quello in cui sono stati creati (feature pack TR1 o meno, ecc.). Forse è meglio provare building Potenzia te stesso nel tuo ambiente specifico.

Altri suggerimenti

È un Emissione side-by-side (SxS) & # 8211; semplicemente copiare le DLL non è più sufficiente.

Per quanto riguarda il tuo problema specifico relativo alla build di debug, vedi: Esecuzione di vc2008 il debug si basa su macchine non sviluppatrici

Risposta breve:

  

Non puoi, perché non esiste una redist dell'installer per il runtime di debug (e in effetti la licenza del software proibisce la distribuzione, quindi infrangerai l'EULA anche se avessi messo insieme qualcosa).

Quindi, dovrai installare Visual Studio lì.

Tuttavia, se vuoi ancora provare senza prendere quel percorso, potresti leggere la risposta di puetzk nella sua interezza.

In alternativa, puoi provare a collegare tutto staticamente .

Questo potrebbe non avere nulla a che fare con SxS. Suggerisco di controllare il registro eventi per i messaggi di errore SxS e di utilizzare il walker delle dipendenze per verificare il problema di dipendenza DLL più probabile, oppure una delle DLL restituisce FALSE dal suo DllMain (per qualsiasi motivo).

Inoltre, abilitando gli snap caricatore:

gflags -i yourapp.exe + sls

potrebbe far luce extra quando eseguito sotto debugger (o deambulatore di dipendenza per quella materia).

Nota: gflags fa parte di Strumenti di debug di Windows .

Procurati il ?? walker delle dipendenze . Apri l'applicazione exe in essa. Ti mostrerà tutte le DLL di cui la tua applicazione ha bisogno ma non può caricare / accedere.

Se ciò non bastasse, puoi anche profilare la tua app con il walker delle dipendenze, che ti darà un sacco di output per scoprire dove si trova il problema.

[modifica] poiché hai solo problemi con la build di debug: assicurati che quando hai aggiornato boost, hai anche ricostruito non solo i binari di rilascio ma anche i binari di debug di boost. E, naturalmente, assicurati che la build di debug sia stata creata con la stessa versione di VisualStudio di quella che stai utilizzando ora.

E assicurati che i percorsi include (directory tools- > options- > progetti e soluzioni- > VC ++) siano corretti: i percorsi all'ultima versione boost devono essere lì, non forse a una versione precedente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top