2010-01-26 22 views
6

Tengo una aplicación C++ que está integrada en Visual Studio (2008) y enlaces a una DLL de Boost. Al depurar, parece que necesito copiar la DLL de Boost en la carpeta de depuración para que el exe que ejecuto en el IDE pueda vincularse a ella. Podría usar un paso posterior a la compilación para copiar el archivo DLL, pero me preguntaba si existe una configuración en Visual Studio que pueda darle una ruta de búsqueda adicional para archivos DLL mientras se depura.Evite copiar DLL de terceros en la carpeta de depuración

+0

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

+0

La pregunta que se hace referencia se relaciona con el uso de un paso posterior a la construcción, que deseo evitar. – Permaquid

+1

JaredPar proporcionó la pista para controlar el entorno, en lugar de buscar una ubicación de búsqueda de biblioteca de Visual Studio. Resulta que hay una configuración de Visual Studio que proporciona exactamente lo que quería, al (aparentemente) agregar otra ruta a la variable de entorno PATH: Propiedades de configuración> Depuración | Ambiente. Esto es por proyecto, y puede usar variables de entorno. La única pieza que falta es la documentación que describe exactamente cómo el entorno de depuración que deseo agregar se fusiona con el existente. – Permaquid

Respuesta

4

Aquí hay una ligera percepción errónea. Visual Studio en sí mismo no controla directamente la carga de DLL en una aplicación mientras está depurando. La carga de las DLL está directamente controlada por el sistema operativo. El sistema operativo busca un conjunto de directorios interesantes para las DLL cuando se solicita una carga.

La principal forma en que VS influye en las DLL cargadas es en virtud de copiarlas en el directorio de salida de compilación. Este suele ser el directorio en el que se ejecuta la aplicación y, por lo tanto, es una de las rutas en las que el sistema operativo buscará las DLL necesarias.

Qué directorios las búsquedas del sistema operativo se controlan por unos pocos elementos. El más fácil de modificar es la variable de entorno (creo que LIBPATH). En el modo de depuración, puede modificar esta variable de entorno para que apunte a su otro directorio y tener la carga DLL desde allí.

Sin embargo, no hay nada que pueda establecer directamente en Visual Studio.

+0

Parece que puede modificar el entorno en el momento de la depuración configurando Entorno como RUTA = $ (RUTA); donde puede contener variables de entorno referenciadas usando la sintaxis $(). También necesita Merge = Yes. Me interesaría si hay alguna documentación que explique los detalles. – Permaquid

+0

Marqué esto como "la" respuesta porque fue la respuesta más útil. Lamentablemente, el bit que dice "no hay nada que pueda establecer en Visual Studio" no es correcto (en mi opinión) - vea mi comentario bajo la pregunta.Sin embargo, gracias por la propina. – Permaquid

1

No hay muchas opciones en Windows para las DLL implícitamente vinculadas al EXE. Corto de almacenar el DLL en la misma carpeta que el EXE, puede almacenarlo en un directorio que se enumera en la variable de entorno PATH. Solo se garantiza que se mostrará c: \ windows \ system32, no se puede usar razonablemente esa carpeta. Un instalador que cambie el entorno del sistema funcionaría, aún no es razonable.

La única opción real es almacenar el archivo DLL en el caché de WinSxS uno al lado del otro. Deberá escribir un manifiesto para que Windows pueda encontrar el archivo DLL. Y deberá escribir un instalador para colocar el archivo DLL en WinSxS. Dada la calidad de la documentación, tendrá que realmente, realmente querer hacer eso.

Si esto es solo una consideración para la depuración, entonces quizás no sea tan importante cambiar la RUTA en su máquina de desarrollo. Use el Panel de control, el applet del sistema.

Cuestiones relacionadas