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.