2008-09-20 14 views
33

En Linux/GCC puedo usar el indicador -rpath para cambiar una ruta de búsqueda de ejecutables para bibliotecas compartidas sin atemperar las variables de entorno.¿Hay un Windows/MSVC equivalente al indicador del enlazador -rpath?

¿Se puede lograr esto también en Windows? Hasta donde yo sé, los dlls siempre se buscan en el directorio del ejecutable y en PATH.

Mi escenario: me gustaría poner bibliotecas compartidas en ubicaciones de acuerdo a sus propiedades (32/64bit/Debug/Release) sin tener en cuenta nombres únicos. En Linux, esto se puede hacer fácilmente a través de rpath, pero aún no he encontrado ninguna forma de hacerlo en Windows.

¡Gracias por cualquier pista!

Respuesta

3

"Isolated applications" es un mecanismo para incrustar un manifiesto XML que describe las dependencias de DLL.

+0

Este mecanismo solo está destinado a ensamblajes. Esto pertenece al código administrado. – Christian

+0

¿Tiene una referencia para eso? Todo lo que he visto sobre este tema parece permitir DLL de código nativo de la misma manera. –

+0

El ensamblaje está definido en [Wikipedia] (https://en.wikipedia.org/wiki/.NET_assembly). MSDN parece utilizar el término Conjunto solo en conjunto con el MSI [Ensambles] (http://msdn.microsoft.com/en-us/library/aa367757%28v=vs.85%29.aspx). Por lo tanto, el artículo al que se hace referencia pertenece a una aplicación instalada. La información rpath está integrada en la aplicación y no se retransmite en una instalación. Rpath es efectivo justo después del enlace. – Christian

16

Lamentablemente, no hay una analogía directa con RPATH. Hay una serie de posibilidades alternativas, cada una de ellas muy probablemente indeseable para usted de una manera especial.

Dado que necesita un exe diferente para cada compilación de todos modos para evitar conflictos de la biblioteca de tiempo de ejecución, como puede adivinar, lo más fácil es poner cada ejecutable en la misma carpeta que cada conjunto de DLL.

Como también lo mencionó, el método más universal es cambiar la variable PATH utilizando un archivo de proceso por lotes para arrancar el exe.

En su lugar, podría cambiar el directorio de trabajo actual antes de ejecutar el programa en la carpeta DLL deseada.

Puede usar la función SetDllDirectory o AddDllDirectory en su exe. Este es probablemente el más cercano a un RPATH, pero solo funciona en WinXP SP1 o posterior.

Si está dispuesto a modificar el nombre de archivo de cada sabor de exe, puede usar la clave de registro "Rutas de la aplicación". Cada exe necesitaría un nombre de archivo único.

Cuestiones relacionadas