jueves, 25 de abril de 2019

Encontrar el listado de librerías (DLL) con carga dinámica en windows en Qt

A la hora de realizar un instalador de una aplicación y encontrar todas las DLL-s necesarias suele ser una tarea relativamente sencilla, para ello se puede usar el Dependency Walker, y este nos dará el listado de dependencias que existen. Este método funciona adecuadamente, siempre y cuando las librerías utilizadas sean todas llamadas de manera estática. ¿y que pasa cuando las librerías se cargan dinámicamente?

Tras estar dándole unas cuantas vueltas, se me ocurrió poner el binario y las librerías estáticas con todas las librerías de Qt y ejecutarlo (todo esto es bajo windows). En la aplicación que queremos obtener el listado ejecutar todas las acciones dónde tienen carga, en mi caso son plugins que se cargan según se necesitan. Una vez ya se han llamado a todos las librerías, abrimos el monitor de recursos de windows, "Resource Monitor" en mi caso.

En el apartado de CPU de la pestaña overview, seleccionamos el proceso que queremos saber las librerías utilizadas (cojo de ejemplo la aplicación del designer de Qt, designer.exe).


Una vez seleccionado, vamos a la pestaña de  CPU y en el apartado de Associated Modules tenemos el listado de librerías que han sido cargadas y utilizadas por el proceso.

 

HINT: En el propio listado se pueden seleccionar todas (Ctrl+A) y copiar con Ctrl+C.

Problemas con python "/usr/bin/env < < python>>: No such file or directory "

Es posible que hayas llegado aquí por un mensaje similar al siguiente:  /usr/bin/env: <<python>>: No such file or directory   Cu...