2015-10-07 99 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

謝謝你的深刻答案。如果這個庫不再被支持,我想我應該找點別的。你知道另一個圖書館是否也可以這樣做? –