[英]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不再受支持,并且存在许多问题。
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
文件不兼容。
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库。
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
。
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). 但是,要使用对图像的本机支持,还应使用同一编译器来编译库
libjpeg
和libpng
,例如, 编译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.