2010-01-26 9 views
6

Possiedo un'applicazione C++ incorporata in Visual Studio (2008) e collegamenti a una DLL Boost. Durante il debug, sembra che ho bisogno di copiare la DLL Boost nella cartella di debug in modo che l'exe che sto correndo nell'IDE possa collegarsi ad esso. Potrei usare un passo post-build per copiare la DLL, ma mi chiedevo se c'è un'impostazione in Visual Studio che può dargli un percorso di ricerca aggiuntivo per le DLL durante il debugging?Evitare di copiare DLL di terze parti nella cartella di debug

+0

http://stackoverflow.com/questions/1776060/how-to-make-visual-studio-copy-dll-to-output-directory –

+0

La domanda fa riferimento si riferisce all'uso di un passo post-build, che desidero evitare. – Permaquid

+1

JaredPar ha fornito il suggerimento per controllare l'ambiente, piuttosto che cercare una posizione di ricerca della libreria di Visual Studio. Si scopre che esiste un'impostazione di Visual Studio che fornisce esattamente ciò che volevo, aggiungendo (apparentemente) un altro percorso alla variabile di ambiente PATH: Proprietà di configurazione> Debug | Ambiente. Questo è per progetto, e puoi usare le variabili d'ambiente. L'unico pezzo mancante è la documentazione che descrive esattamente come l'ambiente di debug che voglio aggiungere si fonde con quello esistente. – Permaquid

risposta

4

Qui c'è una leggera percezione errata. Visual Studio stesso non controlla direttamente il caricamento delle DLL in un'applicazione mentre si esegue il debug. Il caricamento delle DLL è controllato direttamente dal sistema operativo. Il sistema operativo cerca una serie di directory interessanti per le DLL quando viene richiesto un carico.

Il modo principale in cui VS influenza le DLL caricate è in virtù della loro copia nella directory di output di compilazione. Questa è in genere la directory in cui viene eseguita l'applicazione e, quindi, è uno dei percorsi in cui il sistema operativo cerca le DLL necessarie.

Quali directory le ricerche del sistema operativo sono controllate da alcuni elementi. Il più facile da modificare è la variabile di ambiente (LIBPATH credo). In modalità Debug è possibile modificare questa variabile di ambiente in modo che punti alla propria altra directory e caricare la DLL da lì.

Non c'è nulla che puoi impostare direttamente in Visual Studio.

+0

Sembra che sia possibile modificare l'ambiente in fase di debug impostando Ambiente come PATH = $ (PATH); dove può contenere variabili di ambiente referenziate usando la sintassi $(). Hai anche bisogno di Merge = Yes. Sarei interessato se c'è qualche documentazione che spiega i dettagli. – Permaquid

+0

L'ho contrassegnato come "la" risposta perché era la risposta più utile. Sfortunatamente il bit che dice "non c'è nulla che puoi impostare in Visual Studio" non è corretto (secondo me) - guarda il mio commento sotto la domanda.Tuttavia, grazie per il suggerimento. – Permaquid

1

Non ci sono molte opzioni su Windows per DLL implicitamente collegate all'EXE. A meno di memorizzare la DLL nella stessa cartella dell'EXE, è possibile memorizzarla in una directory elencata nella variabile di ambiente PATH. Solo c: \ windows \ system32 è garantito per essere elencato, non puoi ragionevolmente usare quella cartella. Un programma di installazione che modifica l'ambiente di sistema funzionerebbe, ancora non ragionevole.

L'unica opzione reale è quella di memorizzare la DLL nella cache side-by-side di WinSxS. Avrai bisogno di scrivere un manifest in modo che Windows possa trovare la DLL. E dovrai scrivere un programma di installazione per inserire la DLL in WinSxS. Data la qualità della documentazione, è necessario davvero, davvero voglia di farlo.

Se questa è solo una considerazione per il debug, forse non è davvero un grosso problema cambiare il PERCORSO sulla macchina di sviluppo. Usa Pannello di controllo, applet di sistema.

Problemi correlati