visual studio library create crear c++ dll linker static-linking

studio - create dll c++



¿Cómo vincular un.DLL estáticamente? (4)

Tenemos un (puro C ++ nativo) .DLL construido por VS. Como clientes, tenemos algunas aplicaciones C ++ nativas y .Net-Wrapper alrededor de esta DLL escrita en C ++ / CLI. Finalmente, hay algunas aplicaciones de cliente para .Net-Wrapper escritas en C #.

Mi problema es que native.dll debe distribuirse de una manera diferente a como funciona el mundo .Net y el VS no realiza un seguimiento de esa DLL. Entonces, para que todas mis aplicaciones C # funcionen correctamente, tengo que copiarlas en cada directorio ejecutable o ponerlas en algún lugar en% PATH% (lo cual evitaría en las computadoras reveladoras ya que pueden querer iniciar diferentes aplicaciones con diferentes versiones de la DLL). Incluso problemas mayores ocurren si hay UserControls que hacen referencia a la Wrapper-DLL: tiene que copiar la DLL al directorio de VS o de nuevo a% PATH%. Pero el peor caso ocurre con nuestra herramienta de traducción. Esta herramienta realiza un seguimiento de .Net-Assemblies y los empaqueta en Translator-packages que se pueden enviar a un traductor externo. ¡Hasta donde yo sé, no hay forma de poner el .DLL nativo en ese paquete!

Así que planeo vincular estáticamente la DLL nativa en .Net-Wrapper, lo que resolvería mis problemas. Pero para nuestras aplicaciones nativas, esta DLL nativa aún debe ser una DLL.

Entonces tengo dos opciones:

  • Haga dos proyectos de eso (uno que genere una biblioteca estática y otro que cree uno dinámico => Intento evitar esto)
  • Encuentre una solución para vincular archivos DLL estáticamente
  • Encuentre una forma de permitir que VS genere dos resultados de un proyecto

En el archivo de proyecto C ++ para el dll, cree dos configuraciones, una que genere un archivo DLL y otra que genere un archivo .lib. No son necesarios dos proyectos, ya que cualquier proyecto .NET / C ++ puede admitir varias configuraciones de compilación (así es como las versiones Release y Debug se compilan de forma diferente).


Otra opción es tener dos proyectos, un proyecto generará un archivo .lib que se puede vincular estáticamente, y un segundo proyecto que generará un .dll y tendrá su .lib como dependencia, debe agregar .def a su .dll con los símbolos que planea exportar, de lo contrario estará vacío.


Recoja una copia de DLL a Lib (Editar: si no puede encontrar una opción más económica)