GNU/Linux >> Tutoriales Linux >  >> Linux

La descarga de la biblioteca falla

Todd Gayley mencionó una vez que LibraryLoad es para precargar las bibliotecas dependientes que necesita. Entonces, por ejemplo, si escribe una función que necesita una biblioteca numérica, puede cargarla antes de llamar a las funciones en su biblioteca.

No es necesario precargar la biblioteca WolframLibrary ha desarrollado porque lo carga implícitamente al cargar las funciones en él.

Por lo tanto, creo que la solución a su problema es que debe llamar a LibraryFunctionLoad en una de las funciones que está desarrollando y luego LibraryUnload debería funcionar como se esperaba.

Además, debe descargar todas las funciones con LibraryFunctionUnload antes de descargar la biblioteca.


(Información que vale la pena compartir para los usuarios de Windows a pesar de la etiqueta de linux en la pregunta original).

Como se menciona en este comentario, existe un problema adicional en la plataforma Windows, que intentaré describir aquí, siempre que se encuentre una solución.

El LibraryUnload problema de falla en Windows

Supongamos que uno tiene una biblioteca "independiente" myLib.dll , que no tiene nada que ver con Mathematica o LibraryLink. Entonces uno tiene un libLink.dll , que utiliza myLib y proporciona funciones a Mathematica a través de LibraryLink.

Como libLink depende de myLib , uno puede intentar precargar myLib antes de cargar libLink , y funciona sin problemas:

LibraryLoad["myLib.dll"]
myfunc = LibraryFunctionLoad["libLink.dll", ... ]

Pero luego, en Windows, si uno intenta descargarlos con

LibraryUnload["libLink.dll"]
LibraryUnload["myLib.dll"]

El primero tendrá éxito pero el último fallará con un mensaje de error

LibraryFunction::unloadlib: The library myLib.dll cannot be unloaded.

Usando herramientas como Process Explorer, uno puede ver que el kernel no ha liberado el identificador del archivo.

La solución

El problema descrito puede ser frustrante cuando se está desarrollando myLib . Uno tiene que matar el núcleo cada vez antes de volver a compilar myLib . La solución, que fue encontrada y amablemente compartida conmigo por ilian (quien revisó muy generosamente mi código y analizó el problema), es

NO precargar manualmente myLib con LibraryLoad en primer lugar.

En su lugar, se puede modificar el entorno del sistema operativo para que Windows pueda encontrar todas las bibliotecas dependientes y administrarlas automáticamente:

SetEnvironment["PATH" -> Environment["PATH"] <> ";" <> "path_to_folder_of_myLib.dll"]
myfunc = LibraryFunctionLoad["libLink.dll", ... ]

La descarga ahora será tan simple como:

LibraryUnload["libLink.dll"]

Después de eso, si no hay otra referencia a myLib.dll , será editable.


Linux
  1. ¿Alguna vez has traspasado un servidor?

  2. ¿Vsftpd falla en la autenticación de Pam?

  3. ¿Ejecutar una línea de comandos con un Sudo?

  4. ¿Forma de sincronizar solo una partición?

  5. ¿La redirección a un nombre de archivo global falla?

[Consejos de Bash] Cómo cd y ls en un solo comando

[Consejos de Bash] Cómo cp o mv y cd en un solo comando

IP de host local

Cómo deshabilitar una CPU

Autossh falla al iniciar

Caracteres de cola y comodines