2015-10-07 71 views
0

我想添加一个名为pHash的外部库。我将此添加到.pro文件:Qt5 - 链接pHash库“未定义参考”

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 

但库的没有一个功能正在工作。当我尝试使用一个,我有建立错误“未定义参考pHashFunction”。有使用的例子:

#include "myclass.h" 

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

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

再有就是生成日志:

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 

预先感谢您的帮助:)

+0

我你化妆的记录错误是MyClass中,MyClass的。 o:在函数'ZN6myclass7performEv'中,这意味着这个函数在头文件中声明并且没有在.cpp中定义。对于主错误,我认为你应该编译phash库你自己得到.dll或.lib,不要使用预编译库,我用quazip库得到了这个问题 – Mido

回答

1

尝试添加的.c和.cpp到您的项目(dirent.c,ph_fft.c,pHash.cpp,phcomplex.c)它在我的电脑上工作,但我认为问题是.dll和.lib与您的Qt版本不兼容,导致它被编译与Visual Studio。

+0

谢谢,它是为'ph_about()'工作的,但它仍然不能用于其他功能,如'ph_dct_imagehash(..)' –

1

库pHash不再被支持,并且存在许多问题。

  1. 编译器的MinGW 4.9.2使用Qt使用不带内置MSVC .dll文件兼容。

  2. 这是不够用的伎俩"MSVC and MinGW DLLs",因为功能ph_about()不是从pHash.dll出口,例如Building the pHash library on Windows

  3. 它可以整合所有pHash文件到Qt项目,所以该库可与应用程序一起构建。由于图书馆项目是为Visual Studio准备的,我会说Qt也应该基于VC。但是,图书馆的PHash很旧。它是为Visual Studio 2008编写的。现在,它在已弃用的Windows功能SHGetSpecialFolderPathA上出现错误。

  4. 使用Qt MinGW 4.9.2编译器编译所有东西仍然很有用。在这种情况下,需要将DEFINES += HAVE_IMAGE_HASH=1添加到项目.pro文件中,以启用该宏也用于编译pHash。但是,要使用原生支持图片库libjpeglibpng也应该用相同的编译器编译,例如Compiling libjpeg 如果不使用的图像库,Cimg尝试运行一些外部可执行gm.exe(可能是从GraphicsMagick工具)。

如果需要一些快速的任务,可以考虑Linux虚拟磁带库,因为在这里可以开箱即用https://stackoverflow.com/a/33002746/4023446

+0

谢谢你的深刻答案。如果这个库不再被支持,我想我应该找点别的。你知道另一个图书馆是否也可以这样做? –