2011-02-10 33 views
33

En Visual Studio 2010, en VC++ Directories > Executable Directories, he especificado la ruta a glew32d.dll. Sin embargo, cuando ejecuto el ejecutable, todavía se queja.¿Por qué no puede Visual Studio encontrar mi DLL?

Por otro lado, si copio el archivo DLL en la carpeta local y ejecuto el archivo ejecutable, entonces, no se queja.

¿Alguien puede decirme cómo solucionar esto? Además, ¿por qué Visual Studio no reconoce esa ruta?

actualización Escenario: Actualmente utilizo un proyecto de plantilla que utilizo como un código de inicio para muchos de mis proyectos. Esta plantilla depende de glew32d.dll. Normalmente almaceno todos los dlls dependientes en una carpeta bin común. Tenía la esperanza de hacer referencia a esta carpeta y Visual Studio podría leer los dlls desde allí, en lugar de tener que copiar los dlls cada vez. ¿Cuál sería una buena manera de manejar esto?

+0

@muntoo: ¿Qué? Además, no estoy de acuerdo con la forma en que editó la última línea. No hay dos preguntas separadas allí, entonces la gramática original era correcta. El OP pregunta cómo pueden solucionar esto a la luz del hecho de que VS no reconoce el camino. La única razón por la que les importa que VS no reconozca la ruta es porque podría llevarlos a una solución. –

Respuesta

46

Especificar la ruta al archivo DLL en la configuración de su proyecto no garantiza que su aplicación
encuentre la DLL en tiempo de ejecución. Usted solo le dijo a Visual Studio cómo encontrar los archivos que necesita. Eso no tiene nada que ver con
y cómo el programa encuentra lo que necesita, una vez construido.

Colocar el archivo DLL en la misma carpeta que el ejecutable es, de lejos, la solución más simple. Esa es la default search path para las dependencias, por lo que no necesitarás hacer nada especial si vas por esa ruta.
Para evitar tener que hacer esto manualmente cada vez, puede crear un evento posterior a la compilación para su proyecto que
copiará automáticamente la DLL en el directorio apropiado después de que se complete una compilación.

O bien, puede implementar la DLL en Windows side-by-side cache y agregar un manifiesto a su aplicación que especifique la ubicación.

+1

Otro truco "sucio" es establecer el directorio de trabajo de su programa al de 'glew32d.dll'. – MSalters

+1

Estoy un poco confundido por 'Eso no tiene nada que ver con para ver cómo el programa encuentra lo que necesita, una vez creado'. Si no es así, ¿cuál es el uso de 'Directorios Ejecutables'? Además, edité mi pregunta con mi escenario actual. Por favor sugiérame cuál sería una buena manera de lidiar con eso. – brainydexter

+7

@brainy: No estoy seguro de qué parte de mi respuesta no estaba clara. El enlazador de Visual Studio usa la ruta especificada para encontrar las DLL que necesita mientras * construye * su programa. Eso no es lo mismo que lo que necesita su * programa * mientras se ejecuta *. Si eliges vincular estáticamente a 'glew32d.dll', esa sería una historia diferente. Pero dado que está vinculando dinámicamente, el paso del enlazador de la compilación * Y * de su programa en la ejecución necesita poder localizar la DLL. Has resuelto la primera parte, pero no la segunda. A la luz de su actualización, creo que la mejor solución es un paso posterior a la compilación que copie el archivo DLL. –

34

que he experimentado mismo problema con el mismo lib, que se encuentra una solución aquí en SO:

Buscar MSDN para "CÓMO: establecer las variables de entorno para Proyectos". (Es Proyecto> Propiedades> Propiedades de configuración> Depuración "medio ambiente" y "Combinar entorno" propiedades de los que están en prisa.)

La sintaxis es nombre = valor y macros se pueden utilizar (por ejemplo, $ (OutDir)).

Por ejemplo, para agregar el prefijo C: \ Windows \ Temp para el PATH:

PATH=C:\WINDOWS\Temp;%PATH% 

Del mismo modo, para anexar $ (TargetDir) \ DLLS a la RUTA:

PATH=%PATH%;$(TargetDir)\DLLS 

(respondido por Multicolinealidad aquí: How do I set a path in visual studio?

4

prueba "propiedades de configuración -> depuración -> entorno" y establece la variable PATH en run-ti Me

4

Para añadir a la respuesta de Oleg:

que fue capaz de encontrar el archivo DLL en tiempo de ejecución añadiendo> Depuración de Visual $(ExecutablePath) a la variable de entorno PATH en Configuración Properties- estudio. Esta macro es exactamente lo que se define en el campo Propiedades de configuración-> Directorios VC++> Directorios ejecutables *, así que si tiene esa configuración para apuntar a cualquier archivo DLL que necesite, ¡simplemente agregar esto a su RUTA hace que encontrar las DLL en tiempo de ejecución sea fácil!

* En realidad, no sé si la macro $(ExecutablePath) usa la configuración de Directorios ejecutables del proyecto o la configuración de Directorios ejecutables de Páginas de propiedades globales. Dado que tengo todas mis bibliotecas que uso a menudo configuradas a través de las páginas de propiedades, estos directorios aparecen como predeterminados para cualquier proyecto nuevo que creo.

+0

Exactamente lo que estaba buscando, ¡gracias! – AldurDisciple

Cuestiones relacionadas