2012-07-27 20 views
11

Creé una aplicación en Qt Creator que procesa algunas imágenes con CImg. Funciona bien cuando lo ejecuto desde el IDE interno, pero si trato de ejecutarlo desde su directorio, arroja el siguiente error.QT Release build Error de punto de entrada de procedimiento de DLL

The procedure entry point [email protected]@[email protected]$$QAV0AAZ could not be located 
in the dynamic link library QtCore4.dll 

Todo apunta a tener múltiples versiones de las DLL instaladas. Descubrí que mi Xilinx IDE usa las bibliotecas Qt, pero las DLL en cuestión son de la misma versión. No soy realmente un tipo de software, y estoy perdido aquí.

Respuesta

14

Aunque la versión de la biblioteca sea la misma, es posible que no sea compatible. Por ejemplo, fueron compilados con diferentes configuraciones, como con o sin soporte STL, controladores OpenGL, SQL ...

La forma más sencilla de solucionarlo debería ser mover la ruta de Qt SDK al comienzo de la variable de entorno PATH. De esta forma, cada vez que ejecute un archivo ejecutable que requiera bibliotecas Qt cargará los que se incluyen con SDK (los primeros que se encuentran en PATH), a menos que ya haya copias de QtCore4.dll, QtGui4.dll ... en el directorio del ejecutable. Por esta razón, si redistribuye su aplicación, es posible que deba enviar las bibliotecas en su directorio.

Otra opción es la vinculación estática, pero se le solicitará que proporcione el código fuente bajo la licencia (L) GPL.

+0

Hay copias de QtCore4.dll y QtGui4.dll en el directorio. Eso es todo lo que la aplicación debería necesitar. La vinculación estática tampoco funciona. Estoy a punto de arrojar esto al ingeniero y decirle que se ocupe de la versión de línea de comando. –

+0

@Matt ¿Quiere decir que colocó su QtCore4.dll en el directorio de la aplicación y todavía muestra ese mensaje? Probablemente es la DLL incorrecta. Tal vez tomó el archivo DLL del directorio de QtCreator, pero debería tomarlo del SDK, ya que _no_ son iguales (y su aplicación está vinculada a este último). – Claudio

+0

Ran Dependency Walker, y volvió a copiar los dlls en el directorio. No estoy seguro de qué dlls usé originalmente, pero funciona ahora. –

-1

La vinculación estática de las bibliotecas elimina el problema.

+6

Pero las fuerzas que libere bajo GPL (L). – Claudio

0

Use DependencyWalker para listar desde donde se carga qtcore4.dll. Tuve el mismo problema: DependencyWalker me mostró que qtcore4.dll se había cargado desde c: \ windows \ system32, pero no había qtcore4.dll en esta carpeta.

Cuidado: en Windows 7 64 Bit c: \ windows \ SysWOW64 está "mapeado" como c: \ windows \ system32. Y en esta carpeta encontré el dll - Renombré el dll y el problema fue resuelto.

Ver esta respuesta aquí: Qt fresh Gui application crashes on startup, faulting at QtCore4.dll

Cuestiones relacionadas