Page 1 of 1

Компиляция под Windows

PostPosted: Tue Apr 07, 2009 9:00 pm
by aiva
Как скомпилировать под виндой? gcc выдает:
inc_case_folding.hh: In function `size_t Folding::<unnamed>::foldCase(wchar_t, wchar_t*)':
inc_case_folding.hh:1080: warning: large integer implicitly truncated to unsigned type
inc_case_folding.hh:1080: error: duplicate case value

Re: Компиляция под Windows

PostPosted: Tue Apr 07, 2009 10:25 pm
by ikm
Дело в том, что в Windows wchar 16-битный. Отсюда все проблемы.

Однако mingw не выдает мне там ошибки 'duplicate case'. Видимо, разные версии по-разному обрабатывают переполнения.

Так или иначе, простое исправление данной ошибки добавил в SVN.

Re: Компиляция под Windows

PostPosted: Wed Apr 08, 2009 6:04 pm
by aiva
Однако mingw не выдает мне там ошибки 'duplicate case'. Видимо, разные версии по-разному обрабатывают переполнения.


Возможно. Вот мой g++ --version:
g++.EXE (GCC) 3.4.5 (mingw-vista special r3)
Можно узнать, какая версия у тебя?

И еще: для iconv.h скачал http://ftp.gnu.org/pub/gnu/libiconv/lib ... .12.tar.gz, в msys сделал ./configure && make, сгенеренный iconv.h скопировал в папку с goldendict. Теперь получаю ошибку:
Code: Select all
bgl_babylon.cc: In member function `void Babylon::convertToUtf8(std::string&, unsigned int)':
bgl_babylon.cc:537: error: invalid conversion from `const char**' to `char**'
bgl_babylon.cc:537: error:   initializing argument 2 of `size_t libiconv(void*, char**, size_t*, char**, size_t*)'

Подозреваю, что сделал что-то не то. Не можешь расписать, как без проблем скомпилировать под винду?

Re: Компиляция под Windows

PostPosted: Wed Apr 08, 2009 9:58 pm
by ikm
Ты всё делаешь правильно. Просто у нас несколько разные окружения сборки, и поэтому вылезают всякие косяки. Это нехоженная тропка -- тогда как под linux собирает каждый второй, под windows это делают единицы.

Виндовую версию я кросскомпилирую под линуксом. В принципе, разница небольшая, но версии компилятора и всякие другие штуки несколько разнятся. Однако под чистой виндой тоже должно всё собираться.

В качестве компилятора у меня используется debian-сборка mingw:

Code: Select all
$ i586-mingw32msvc-g++ --version
i586-mingw32msvc-g++ (GCC) 4.2.1-sjlj (mingw32-2)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


libiconv я брал с gnuwin32.sf.net. С iconv проблема в том, что разные её сборки имеют разные прототипы функции iconv(). В некоторых версиях присутствует const-модификатор, в других нет. Решается это всеми кое-как условной компиляцией. Короче, тут либо попробуй gnuwin32-версию, либо на 527-й строчке сотри слово const. Но там такая же тема как минимум еще в iconv.cc:41.

Всё это довольно утомительно, но могу сказать, что через некоторое время ошибки сборки заканчиваются, все собирается и начинает работать :)

Re: Компиляция под Windows

PostPosted: Thu Apr 09, 2009 11:56 am
by aiva
libiconv, взятая c gnuwin32, подошла. Там же брал остальные библиотеки. Сейчас ошибка возникает при компиляции dsl.cc - компилятор не знает символа zip
Code: Select all
class DslDictionary: public BtreeIndexing::BtreeDictionary
{
...
  zip * resourceZip;

Скомпилировал с ключом -E и посмотрел выхлоп - действительно нигде нет объявления zip.
zip.h брал из одноименной библиотеки.

Re: Компиляция под Windows

PostPosted: Thu Apr 09, 2009 4:04 pm
by ikm
libzip я брал с http://nih.at/libzip. Следует убедиться в том, что zip.h действительно находится в путях и подключается, потому что struct zip декларирован внутри него.