Hunspell Windowson DLL-re, Cygwin nélkül

A probléma: van egy Qt-os programom, amihez szeretnék egy hunspell.dll-t linkelni. A gond csak az, hogy sehol sem találok egy előre lefordítottat, és a hunspell mellé ékelt extrém szűkszavú leírás is csak cygwint említ, de nem szól egy szót sem a .dll-ről.

Cygwint kipróbáltam végső elkeseredésemben, de csak arra volt jó, hogy a programom még 3 DLL-t behúzzon és 100%-on pörgesse a procit induláskor. Szóval semmiképpen sem a nyerő út.

Régi leírás 1.5.4-ig

Jó néhány óra szórakozás után álljon itt a megoldás MingW/GCC 5.3-mal:

  1. Töltsük le a hunspell forráskódját és csomagoljuk ki.
  2. MinGW telepítése (én a Qt-osat használtam, mert vele jár, de gondolom, ez is ugyanolyan jó);
  3. állítsuk be a Path-t és egyéb környezeti változókat a parancssorban (a Qt Command Line ezt megteszi nekünk);
  4. másoljuk be az src/parsers összes .hxx, .c és .cxx fájlját az src/hunspell könyvtárba (a Makefile-okat ne írjuk felül);
  5. az src/win_api-ból szintén másoljuk az src/hunspell-be az összes fájlt, kivéve a Makefile.am és a Makefile.in fájlokat;
  6. az src/hunspell/Makefile.cygwin fájlból töröljük ki az -mno-cygwin két előfordulását (elavult kapcsoló, amit az új make már nem ismer), illetve opcionálisan az -O2-t cseréljük -O3-ra;
  7. nevezzük át az src/hunspell-ben található "hunvisapi.h.in"-t "hunvisapi.h"-ra;
  8. lépjünk be az src/hunspell-be, majd adjuk ki a mingw32-make -f Makefile.cygwin parancsot. Kapunk két hibát, de ne foglalkozzunk vele (nem találja az ar csomagolót);
  9. adjuk ki a következőt: g++ -DHUNSPELL_STATIC -O3 -ansi -I. -c odfparser.cxx xmlparser.cxx (valamiért ezeket nem tették bele a cygwines Makefile-ba, illetve a -pedantic kapcsoló sem működik náluk)
  10. végül pedig adjuk ki a következő parancsot: g++ -DHUNSPELL_STATIC hunspelldll.c -shared -o hunspell-1.5.dll -L. replist.cxx affentry.o affixmgr.o csutil.o filemgr.o firstparser.o hashmgr.o htmlparser.o hunspell.o hunzip.o latexparser.o manparser.o phonet.o suggestmgr.o textparser.o odfparser.o xmlparser.o -O3 -pedantic -ansi -Wl,-enable-auto-import

Persze lehet egyszerűsíteni is. A lényeg, hogy a létrejövő hunspell-1.5.dll már linkelhető lesz a MinGW-vel fordított alkalmazásokhoz (mint amilyenek a Qt-osok is) a LIBS += -lhunspell-1.5 kapcsolóval.

Új változat, 1.6.0-tól (MinGW alatt, DLL behúzásakor kifagy)

  1. hunspell letöltése és kicsomagolása;
  2. Töltsük le a MinGW-get telepítő csomagot és telepítsük a megjelenő táblázatból az msys-base csomagot. Ezen kívül telepítsük az All packages-ből a mingw32-automake, a mingw32-gettext, a mingw32-libtool és a mingw32-gcc-g++ binárisait és dev csomagjait.
  3. Vegyük fel a MinGW\etc\fstab fájlba a hunspell-1.6.0 könyvtárunkat új bejegyzésként.
  4. Indítsuk el a MinGW\msys\1.0\msys.bat fájlt és lépjünk be a hunspell-1.6.0 könyvtárba, majd adjuk ki a következő parancsot: autoreconf -vfi .
  5. A hunspell-1.6.0/src/tools/hzip.cxx:350-ből szedjük ki a | S_IRWXG | S_IRWXO részt. Windowson ezek a makrók nem értelmezettek.
  6. Indítsuk el a ./configure --prefix=/qt/hunspell-1.6.0/binaries && make -j 10 && make install parancsot, ahol a /qt a kiegészítő programok gyökérkönyvtárát jelöli.
  7. Az elkészült DLL fájlunk a hunspell-1.6.0/binaries/bin mappában található meg.

Új változat, 1.6.0-tól (Qt parancssor alatt, működik)

Itt már teljesen kiszedték a Cygwin maradékát is, így kissé brute-force, de mindenképpen működő módon készítünk DLL-t.

  1. hunspell letöltése és kicsomagolása;
  2. Hozzunk létre a hunspell kicsomagolt mappájában az src-win\[hunspell,src] könyvtárakat.
  3. Az src\hunspell és src\parsers mappák alól minden *.cxx, *.hxx és *.h fájlt másoljunk az src-win\src mappába a parsers\testparser.cxx fájl kivételével.
  4. Innen másoljunk át minden *.hxx és *.h fájlt az src-win\hunspell mappába.
  5. Végül készítsük el a DLL-ünket az src-win\src mappában az alábbi parancs Qt parancssorban való kiadásával: g++ -DHUNSPELL_STATIC -O3 -ansi -I. -shared replist.cxx affentry.cxx affixmgr.cxx csutil.cxx filemgr.cxx firstparser.cxx hashmgr.cxx htmlparser.cxx hunspell.cxx hunzip.cxx latexparser.cxx manparser.cxx phonet.cxx suggestmgr.cxx textparser.cxx odfparser.cxx xmlparser.cxx -o hunspell-1.7.dll

Tehát: Cygwin nélkül, csak MinGW-t használva így kell gyorsan elkészíteni egy saját rendszerre szabott DLL-t hunspellből, és ezzel feleslegessé válnak a Cygwines DLL-ek is.

Szerkesztve:
- MingW 4.8-hoz igazítva (2013.)
- Hunspell 1.3.3-hoz igazítva (2014. 08. 29.)
- Hunspell 1.4.1-hez igazítva (2016. 09. 23.)
- Hunspell 1.5.4-hez igazítva (2016. 12. 21.)
- Hunspell 1.6.0-hoz igazítva (2017. 03. 17.)
- Hunspell 1.7.0-hoz igazítva (2018. 11. 24.)

Hozzászólások

Van ott Visual Studióhoz való szolúció is (a README nem említi), emlékeim szerint azzal is lefordul a dll.

Igazabol en nem szokom leszedni. A winyon elfer, es barmikor szembejohet olyan feladat, hogy megint szuksegem van ra. Kulonben a VS cuccok igen tisztesseges (bar lassu) telepitovel vannak megaldva, altalaban rendesen takaritanak maguk utan, csak a userprofilokba hagyjak ott a nyomukat.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Signup :) Én ha jól emléxem kínomban (2005 júliusi dátuma van a dll-nek) xvid videokhoz forgattam hasonlóképp kodek-et... (xvidcore-1.1.0-beta2...)