简体   繁体   English

Qt5-链接pHash库“未定义参考”

[英]Qt5 - Link pHash library “undefined reference”

I would like to add an external library called pHash . 我想添加一个名为pHash的外部库。 I added this to .pro file : 我将此添加到.pro文件:

win32:CONFIG(release, debug|release): LIBS += -L$PWD/Libs/pHash-0.9.4/release -lpHash
else:win32:CONFIG(debug, debug|release): LIBS += -L$PWD/Libs/pHash-0.9.4/debug -lpHash

INCLUDEPATH += $PWD/Libs/pHash-0.9.4
DEPENDPATH += $PWD/Libs/pHash-0.9.4

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $PWD/Libs/pHash-0.9.4/release/pHash.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $PWD/Libs/pHash-0.9.4/debug/pHash.lib

But no one function of the library is working. 但是该库的任何功能都没有起作用。 When I try to use one, I have build error "undefined reference to pHashFunction". 当我尝试使用一个时,出现构建错误“对pHashFunction的未定义引用”。 There is an example of use : 有一个使用示例:

#include "myclass.h"

#define HAVE_IMAGE_HASH 1 // config
#include "pHash.h"

void MyClass::perform() {
    const char *msg = ph_about();
    qDebug() << msg;
}

Then there is the build log : 然后是构建日志:

C:/Qt/Tools/mingw492_32/bin/mingw32-make -f Makefile.Debug clean
mingw32-make[1]: Entering directory 'C:/Users/vi/Documents/Programmation/QtWorkspace/build-myProject-Desktop_Qt_5_5_0_MinGW_32bit-Debug'
rm -f debug/qrc_qml.cpp
rm -f debug/moc_myclass.cpp
rm -f debug/main.o debug/myclass.o debug/qrc_qml.o debug/moc_myclass.o
mingw32-make[1]: Leaving directory 'C:/Users/vi/Documents/Programmation/QtWorkspace/build-myProject-Desktop_Qt_5_5_0_MinGW_32bit-Debug'
C:/Qt/Tools/mingw492_32/bin/mingw32-make -f Makefile.Release clean
mingw32-make[1]: Entering directory 'C:/Users/vi/Documents/Programmation/QtWorkspace/build-myProject-Desktop_Qt_5_5_0_MinGW_32bit-Debug'
rm -f release/qrc_qml.cpp
rm -f release/moc_myclass.cpp
rm -f release/main.o release/myclass.o release/qrc_qml.o release/moc_myclass.o
mingw32-make[1]: Leaving directory 'C:/Users/vi/Documents/Programmation/QtWorkspace/build-myProject-Desktop_Qt_5_5_0_MinGW_32bit-Debug'
01:31:34: Le processus "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" s'est terminé normalement.
01:31:34: Configuration inchangée, étape qmake sautée.
01:31:34: Débute : "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" 
C:/Qt/Tools/mingw492_32/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/Users/vi/Documents/Programmation/QtWorkspace/build-myProject-Desktop_Qt_5_5_0_MinGW_32bit-Debug'
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I../myProject -I. -I../myProject/Libs/pHash-0.9.4 -IC:/Qt/5.5/mingw492_32/include -IC:/Qt/5.5/mingw492_32/include/QtQuick -IC:/Qt/5.5/mingw492_32/include/QtGui -IC:/Qt/5.5/mingw492_32/include/QtANGLE -IC:/Qt/5.5/mingw492_32/include/QtQml -IC:/Qt/5.5/mingw492_32/include/QtNetwork -IC:/Qt/5.5/mingw492_32/include/QtCore -Idebug -IC:/Qt/5.5/mingw492_32/mkspecs/win32-g++  -o debug/main.o ../myProject/main.cpp
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I../myProject -I. -I../myProject/Libs/pHash-0.9.4 -IC:/Qt/5.5/mingw492_32/include -IC:/Qt/5.5/mingw492_32/include/QtQuick -IC:/Qt/5.5/mingw492_32/include/QtGui -IC:/Qt/5.5/mingw492_32/include/QtANGLE -IC:/Qt/5.5/mingw492_32/include/QtQml -IC:/Qt/5.5/mingw492_32/include/QtNetwork -IC:/Qt/5.5/mingw492_32/include/QtCore -Idebug -IC:/Qt/5.5/mingw492_32/mkspecs/win32-g++  -o debug/myclass.o ../myProject/myclass.cpp
In file included from ../myProject/myclass.cpp:3:0:
../myProject/Libs/pHash-0.9.4/pHash.h:299:21: warning: 'cimg_library::CImg<float>* ph_dct_matrix(int)' declared 'static' but never defined [-Wunused-function]
 static CImg<float>* ph_dct_matrix(const int N);
                     ^
'C:\Qt\5.5\mingw492_32\bin\rcc.exe' -name qml ../myProject/qml.qrc -o debug/qrc_qml.cpp
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I../myProject -I. -I../myProject/Libs/pHash-0.9.4 -IC:/Qt/5.5/mingw492_32/include -IC:/Qt/5.5/mingw492_32/include/QtQuick -IC:/Qt/5.5/mingw492_32/include/QtGui -IC:/Qt/5.5/mingw492_32/include/QtANGLE -IC:/Qt/5.5/mingw492_32/include/QtQml -IC:/Qt/5.5/mingw492_32/include/QtNetwork -IC:/Qt/5.5/mingw492_32/include/QtCore -Idebug -IC:/Qt/5.5/mingw492_32/mkspecs/win32-g++  -o debug/qrc_qml.o debug/qrc_qml.cpp
'C:\Qt\5.5\mingw492_32\bin\moc.exe' -DUNICODE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -D__GNUC__ -DWIN32 -IC:/Qt/5.5/mingw492_32/mkspecs/win32-g++ -IC:/Users/vi/Documents/Programmation/QtWorkspace/myProject -IC:/Users/vi/Documents/Programmation/QtWorkspace/myProject/Libs/pHash-0.9.4 -IC:/Qt/5.5/mingw492_32/include -IC:/Qt/5.5/mingw492_32/include/QtQuick -IC:/Qt/5.5/mingw492_32/include/QtGui -IC:/Qt/5.5/mingw492_32/include/QtANGLE -IC:/Qt/5.5/mingw492_32/include/QtQml -IC:/Qt/5.5/mingw492_32/include/QtNetwork -IC:/Qt/5.5/mingw492_32/include/QtCore -I. ../myProject/myclass.h -o debug/moc_myclass.cpp
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I../myProject -I. -I../myProject/Libs/pHash-0.9.4 -IC:/Qt/5.5/mingw492_32/include -IC:/Qt/5.5/mingw492_32/include/QtQuick -IC:/Qt/5.5/mingw492_32/include/QtGui -IC:/Qt/5.5/mingw492_32/include/QtANGLE -IC:/Qt/5.5/mingw492_32/include/QtQml -IC:/Qt/5.5/mingw492_32/include/QtNetwork -IC:/Qt/5.5/mingw492_32/include/QtCore -Idebug -IC:/Qt/5.5/mingw492_32/mkspecs/win32-g++  -o debug/moc_myclass.o debug/moc_myclass.cpp
g++ -Wl,-subsystem,windows -mthreads -o debug/myProject.exe debug/main.o debug/myclass.o debug/qrc_qml.o debug/moc_myclass.o  -lmingw32 -LC:/Qt/5.5/mingw492_32/lib -lqtmaind -lshell32 -LC:/Users/vi/Documents/Programmation/QtWorkspace/myProject/Libs/pHash-0.9.4/debug -lpHash -lQt5Quickd -lQt5Guid -lQt5Qmld -lQt5Networkd -lQt5Cored 
debug/myclass.o: In function `ZN6myclass7performEv':
C:\Users\vi\Documents\Programmation\QtWorkspace\build-myProject-Desktop_Qt_5_5_0_MinGW_32bit-Debug/../myProject/myclass.cpp:11: undefined reference to `ph_about'
collect2.exe: error: ld returned 1 exit status
Makefile.Debug:83: recipe for target 'debug/myProject.exe' failed
mingw32-make[1]: *** [debug/myProject.exe] Error 1
mingw32-make[1]: Leaving directory 'C:/Users/vi/Documents/Programmation/QtWorkspace/build-myProject-Desktop_Qt_5_5_0_MinGW_32bit-Debug'
makefile:34: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2

Thank you in advance for your help :) 预先感谢您的帮助 :)

尝试将.c和.cpp添加到您的项目中(dirent.c,ph_fft.c,pHash.cpp,phcomplex.c),但我认为问题在于.dll和.lib不在与您的Qt版本兼容,因为它是使用Visual Studio编译的。

The library pHash is no longer supported and there are many problems. 库pHash不再受支持,并且存在许多问题。

  1. The compiler MinGW 4.9.2 used by Qt is not compatible with .dll files built in MSVC. Qt使用的编译器MinGW 4.9.2与MSVC内置的.dll文件不兼容。

  2. It is not enough to use the trick "MSVC and MinGW DLLs" , since the function ph_about() is not exported from pHash.dll , for example Building the pHash library on Windows 仅使用技巧“ MSVC和MinGW DLL”是不够的,因为没有从pHash.dll导出函数ph_about() ,例如,在Windows上构建pHash库。

  3. It is possible to integrate all pHash files into Qt project, so the library can be built together with the application. 可以将所有pHash文件集成到Qt项目中,因此可以将库与应用程序一起构建。 Since the library project is prepared for Visual Studio I would say that the Qt should also be based on VC. 因为库项目是为Visual Studio准备的,所以我想说Qt也应该基于VC。 However, the library pHash is old. 但是,库pHash很旧。 It was written for Visual Studio 2008. Now it gives error on deprecated Windows function SHGetSpecialFolderPathA . 它是为Visual Studio 2008编写的。现在,它已弃用Windows函数SHGetSpecialFolderPathA

  4. It is still prossible to compile everything using Qt MinGW 4.9.2 compiler. 使用Qt MinGW 4.9.2编译器编译所有内容仍然是可行的。 In that case it is needed to add DEFINES += HAVE_IMAGE_HASH=1 to the project .pro file to enable that macro also for pHash compilation. 在这种情况下,需要将DEFINES += HAVE_IMAGE_HASH=1到项目.pro文件中,以使该宏也能用于pHash编译。 However, to use native support for images the libraries libjpeg and libpng also should be compiled with the same compiler, for example Compiling libjpeg If the image libraries are not used, Cimg tries to run some external executable gm.exe (probably from GraphicsMagick). 但是,要使用对图像的本机支持,还应使用同一编译器来编译库libjpeglibpng ,例如, 编译libjpeg。如果不使用图像库,则Cimg尝试运行一些外部可执行文件gm.exe (可能来自GraphicsMagick)。

If the library is needed for some quick task it is possible to consider virtual Linux, since here it can be used out of the box https://stackoverflow.com/a/33002746/4023446 如果某个快速任务需要该库,则可以考虑使用虚拟Linux,因为在这里可以直接使用它https://stackoverflow.com/a/33002746/4023446

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法在Qt5中将UniDAQ库与MinGW4.8.2链接(未定义对`_imp__的引用) - Fail to link UniDAQ library with MinGW4.8.2 in Qt5 (undefined reference to `_imp__) 安装 pHash 库时未定义对 `fftw_init_threads&#39; 的引用 - Undefined reference to `fftw_init_threads' while installing pHash library Qt5对`QDeclarativeDebuggingEnabler :: QDeclarativeDebuggingEnabler()&#39;的未定义引用 - Qt5 undefined reference to `QDeclarativeDebuggingEnabler::QDeclarativeDebuggingEnabler()' qt5 webkit对`QWebView :: load`的未定义引用 - qt5 webkit undefined reference to `QWebView::load` QT5:对`QString :: free(QString :: Data *)&#39;的未定义引用 - QT5: undefined reference to `QString::free(QString::Data*)' 将项目转换为qt5和cmake对qt5和cmake的`vtable的未定义引用 - Convert project to qt5 and cmake undefined reference to `vtable for qt5 and cmake Qt5-尝试创建登录页面时出现“ undefined reference”错误 - Qt5 - “undefined reference” error while trying to create a login page qt5 对“QApplication::QApplication(int&amp;, char**, int)”的未定义引用 - qt5 undefined reference to 'QApplication::QApplication(int&, char**, int)' 在库中使用Qt5 - Using Qt5 in a library qt5添加了库“ Qt5WebEngineCore.lib”,但链接名为“ Qt5WebEngineCore551.lib” - qt5 add library “Qt5WebEngineCore.lib” but link named “Qt5WebEngineCore551.lib”
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM