[SOLVED] How to use Hunspell in Qt on Windows system
-
wrote on 6 Dec 2014, 21:05 last edited by
Hi,
In my application, I try to use a spell checker. I have found this :
http://qt-project.org/wiki/Spell-Checking-with-HunspellIt works with hunspell and give a very well spell checking. It works perfectly on Linux, but when I tested it in Windows and it doesn't works... I have this error messages:
@spellchecker.obj : error LNK2019: unresolved external symbol "public: __thiscall Hunspell::Hunspell(char const *,char const *,char const *)" (??0Hunspell@@QAE@PBD00@Z) referenced in function "public: __thiscall SpellChecker::SpellChecker(class QString const &,class QString const &)" (??0SpellChecker@@QAE@ABVQString@@0@Z)
spellchecker.obj : error LNK2019: unresolved external symbol "public: __thiscall Hunspell::~Hunspell(void)" (??1Hunspell@@QAE@XZ) referenced in function "public: void * __thiscall Hunspell::`scalar deleting destructor'(unsigned int)" (??_GHunspell@@QAEPAXI@Z)
spellchecker.obj : error LNK2019: unresolved external symbol "public: int __thiscall Hunspell::spell(char const *,int *,char * *)" (?spell@Hunspell@@QAEHPBDPAHPAPAD@Z) referenced in function "public: bool __thiscall SpellChecker::spell(class QString const &)" (?spell@SpellChecker@@QAE_NABVQString@@@Z)
spellchecker.obj : error LNK2019: unresolved external symbol "public: int __thiscall Hunspell::suggest(char * * *,char const *)" (?suggest@Hunspell@@QAEHPAPAPADPBD@Z) referenced in function "public: class QStringList __thiscall SpellChecker::suggest(class QString const &)" (?suggest@SpellChecker@@QAE?AVQStringList@@ABVQString@@@Z)
spellchecker.obj : error LNK2019: unresolved external symbol "public: int __thiscall Hunspell::add(char const *)" (?add@Hunspell@@QAEHPBD@Z) referenced in function "private: void __thiscall SpellChecker::put_word(class QString const &)" (?put_word@SpellChecker@@AAEXABVQString@@@Z)
debug\CeCWriter.exe : fatal error LNK1120: 5 unresolved externals@I have adapt my project file as indicated in the page, like this:
@unix {
INCLUDEPATH += /usr/include/hunspell
contains(QMAKE_HOST.arch, x86_64) {
LIBS += /usr/lib/x86_64-linux-gnu/libhunspell-1.3.a
}
else {
LIBS += /usr/lib/i386-linux-gnu/libhunspell-1.3.a
}
}win32 {
INCLUDEPATH +=C:\hunspell\include
LIBS += C:\hunspell\lib\libhunspell-1.3.a
}@I precise I have installed hunspell from the installer I have found here : http://sourceforge.net/projects/ezwinports/files/
Why it doesn't works and how solve my problem?
Thank you in advance for your help,
Floréal.
-
Hi,
First thing to do: change the backslashes, either escape them or use the unix notation since Qt supports that on Windows.
By the way, what compiler are you using ?
-
wrote on 6 Dec 2014, 21:37 last edited by
Hi,
I used slashes instead of backslashes first and I had the same errors.
I am using microsoft visual studio c++ 11.0 (2012), as it is the default complator that Qt propose me.
-
Looks like you are trying to link a MinGW library to your MSVC build, aren't you ?
-
wrote on 13 Dec 2014, 21:15 last edited by
Ok,
I have tried using MinGW to compile my project. First, it does not work with the hunspell I have.
I search and I found a mingw version of hunspell, here:
https://github.com/zdenop/hunspell-mingw
(I use the zip compiled in Windows XP that they give).I try with it.
My .pro file contains now:
@win32 {
INCLUDEPATH += C:/hunspell/include
LIBS += C:/hunspell/lib/libhunspell.a
}@My program start now successfully... but when I push the button to begin spell checking the program crash. With debug, I found it crash on that line, in spellchecker.cpp:
@ _hunspell = new Hunspell(affixFilePathBA.constData(), dictFilePathBA.constData());@Do you know why and how solve the problem?
Thank you for your help, and in advance for your future help. It's really important for me to find a solution.
Floréal.
-
Are you sure that both parameters contains valid paths ?
-
wrote on 13 Dec 2014, 23:05 last edited by
For the INCLUDEPATH yes, it is like author say (http://qt-project.org/wiki/Spell-Checking-with-Hunspell).
For the LIBS, it is written a file to a .lib file but I don't find any .lib file. I think .lib file is for visual studio project as compilation of hunspell with visual studio generate a .lib file.
For linux, we have to use a .a file, so as it was a .a file in the lib directory of hunspell I use it.
Do you think the errors are in these paths?
-
Sorry, I meant the parameters you are passing to the Hunspell constructor
-
wrote on 13 Dec 2014, 23:16 last edited by
I think yes.
files are in C:\hunspell\dics\ and are named fr.dic and fr.aff.
So I use C:/hunspell/dics/fr as the base name and I have checked the program suffix files with .dic and .aff before calling Hunspell constructor.
This part work very well on linux (with its own path, of course), with exactly the same code. I don't know why it crash only on windows...
-
wrote on 13 Dec 2014, 23:28 last edited by
I have also tried to copy dic files from linux to windows to use exactly the sames, but it does not solve the problem
-
Does the debugger give you more information about where exactly it crashes in Hunspell's library ?
-
Indeed, especially on Windows, you have to ensure you use the same compiler for all libraries e.g. MSVC's compilers are not compatible between versions. MinGW should be more flexible but is also known to break compatibility from time to time
1/12