Function not found in wrong dll

2019-07-29 22:17发布

I have written a Windows application using qt, that has a number of dll dependencies. However, when i moved it to another machine, i started getting errors like "entry point @@somethingsomething not found in avformat55.dll".

The kicker is, this message is correct. The function is not in that dll at all, it is in completely different one, that is also in the folder of the executable.

Why would be function searched for in wrong place? How should that be fixed?

Edit: i have exchanged all ffmpeg dlls for ones built for x64 system; this causes program to fail to start with 0xc000007b exception; that probably has to do with system being 64-bit.

Edit. I have tried binaries on several other machines, the same mistake occurs regardles of being x64 or x86. But debug build works correctly, so it is a release build problem.

Edit: my .pro file

#-------------------------------------------------
#
# Project created by QtCreator 2013-05-17T10:55:01
#
#-------------------------------------------------


QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = LPR_Demo
TEMPLATE = app
# The application version
VERSION = 1.0

# Define the preprocessor macro to get the application version in our application.
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
SOURCES += main.cpp\
        mainwindow.cpp \
    imgProcessor.cpp \
    qpicturelabel.cpp \
    aboutdialog.cpp \
    state.cpp \
    qt_videoreader.cpp \
    roidialog.cpp \
    recognitionresult.cpp \
    ffmpeg_reader.cpp \
    label_videoplayer.cpp

HEADERS  += mainwindow.h \
    imgProcessor.h \
    qpicturelabel.h \
    aboutdialog.h \
    state.h \
    qt_videoreader.h \
    roidialog.h \
    recognitionresult.h \
    global.h \
    ffmpeg_reader.h \
    label_videoplayer.h

FORMS    += mainwindow.ui \
    aboutdialog.ui \
    roidialog.ui
LPRDIR = $$PWD/LPR
win32: LIBS += -L$$LPRDIR/bin/ -lliblpr
unix:LIBS += -L$$LPRDIR/bin -lLPR

INCLUDEPATH += $$LPRDIR/include

DEPENDPATH += $$LPRDIR/include

INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/

#OTHER_FILES += \
#    ffmpeg.pri
include(ffmpeg.pri)
#LIBS += -lavformat -lavcodec -lavutil -lswscale

RESOURCES += \
    lpr_Res.qrc

win32 {
dlls_to_move.path += $$OUT_PWD/bin

dlls_to_move.files += $$LPRDIR/bin/liblpr.dll

QTDIR=C:/Qt/4.8.4/

CONFIG (debug, debug|release) {

dlls_to_move.files += $$QTDIR/bin/QtCored4.dll \
    $$QTDIR/bin/QtGuid4.dll

}
CONFIG (release, debug|release) {

dlls_to_move.files += $$QTDIR/bin/QtCore4.dll \
    $$QTDIR/bin/QtGui4.dll
}
img_format.path += $$OUT_PWD/bin/imageformats
CONFIG (debug, debug|release) {

img_format.files += $$QTDIR/plugins/imageformats/qgifd4.dll \
    $$QTDIR/plugins/imageformats/qicod4.dll \
    $$QTDIR/plugins/imageformats/qjpegd4.dll \
    $$QTDIR/plugins/imageformats/qmngd4.dll \
    $$QTDIR/plugins/imageformats/qsvgd4.dll \
    $$QTDIR/plugins/imageformats/qtgad4.dll \
    $$QTDIR/plugins/imageformats/qtiffd4.dll

}
CONFIG (release, debug|release) {

img_format.files += $$QTDIR/plugins/imageformats/qgif4.dll \
    $$QTDIR/plugins/imageformats/qico4.dll \
    $$QTDIR/plugins/imageformats/qjpeg4.dll \
    $$QTDIR/plugins/imageformats/qmng4.dll \
    $$QTDIR/plugins/imageformats/qsvg4.dll \
    $$QTDIR/plugins/imageformats/qtga4.dll \
    $$QTDIR/plugins/imageformats/qtiff4.dll
}

ffmpeg_dll.path += $$OUT_PWD/bin

ffmpeg_dll.files += $$FFMPEG_LIBRARY_PATH/avutil-*.dll \
    $$FFMPEG_LIBRARY_PATH/avcodec-*.dll \
    $$FFMPEG_LIBRARY_PATH/avformat-*.dll \
    $$FFMPEG_LIBRARY_PATH/swscale-*.dll

main_exe.path += $$OUT_PWD/bin
CONFIG (debug, debug|release) {

main_exe.files += $$OUT_PWD/debug/LPR_Demo.exe

}
CONFIG (release, debug|release) {
main_exe.files += $$OUT_PWD/release/LPR_Demo.exe

}
INSTALLS += dlls_to_move img_format ffmpeg_dll main_exe
}

unix {
CONFIG (release, debug|release) {
    QMAKE_PRE_LINK += rm LPR_Demo_cmpr LPR_Demo$$escape_expand(\n\t)
    QMAKE_POST_LINK += upx -9 -oLPR_Demo_cmpr LPR_Demo$$escape_expand(\n\t)
    QMAKE_POST_LINK += cp -v -u LPR_Demo_cmpr $$OUT_PWD/../artifacts/examples/qt_demo/bin/unix
}

}

and *.pri file

# Include the configuration file below in the QT .pro file, and modify the path accordingly.


# ##############################################################################
# ##############################################################################
# FFMPEG: START OF CONFIGURATION BELOW ->
# Copy these lines into your own project
# Make sure to set the path variables for:
# 1) ffmpeg_reader,
# 2) FFMPEG include path (i.e. where the directories libavcodec, libavutil, etc. lie),
# 3) the binary FFMPEG libraries (that must be compiled separately).
# Under Linux path 2 and 3 may not need to be set as these are usually in the standard include and lib path.
# Under Windows, path 2 and 3 must be set to the location where you placed the FFMPEG includes and compiled binaries
# Note that the FFMPEG dynamic librairies (i.e. the .dll files) must be in the PATH
# ##############################################################################
# ##############################################################################

# ##############################################################################
# Modify here: set FFMPEG_LIBRARY_PATH and FFMPEG_INCLUDE_PATH
# ##############################################################################

# Set FFMPEG_LIBRARY_PATH to point to the directory containing the FFmpeg import libraries (if needed - typically for Windows), i.e. the dll.a files
win32:FFMPEG_LIBRARY_PATH = $$PWD/ffmpeg/lib

unix: FFMPEG_LIBRARY_PATH = /usr/local/lib

# Set FFMPEG_INCLUDE_PATH to point to the directory containing the FFMPEG includes (if needed - typically for Windows)
win32:FFMPEG_INCLUDE_PATH = $$PWD/ffmpeg/include
unix:FFMPEG_INCLUDE_PATH = /usr/local/include
# ##############################################################################
# Do not modify: FFMPEG default settings
# ##############################################################################


# Set list of required FFmpeg libraries
#unix:LIBS += -L$$FFMPEG_LIBRARY_PATH
unix:LIBS += -lavformat -lavcodec -lavutil -lswscale
# Add the path
win32:LIBS += -L$$FFMPEG_LIBRARY_PATH
win32:LIBS += -lavformat -lavcodec -lavutil -lswscale
INCLUDEPATH += $$FFMPEG_INCLUDE_PATH

# Requied for some C99 defines
DEFINES += __STDC_CONSTANT_MACROS

# ##############################################################################
# FFMPEG: END OF CONFIGURATION
# ##############################################################################

标签: windows qt dll
0条回答
登录 后发表回答