Компиляция Hunspell как статической библиотеки в C ++ Builder - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь использовать Hunspell DLL в C ++ Builder, но у меня нет ничего, кроме проблем.

Поэтому я пытаюсь использовать компиляцию как статическую библиотеку Но даже это не идет гладко. Шаги, которые я сделал до сих пор:

  1. скачал последнюю версию Hunspell с https://github.com/hunspell/hunspell/releases

  2. разархивирован и создан в C ++ Builder - Новое / Другое / Статическая библиотека

  3. щелкнул правой кнопкой мыши и добавил все *. Cxx файлы из src/hunspell папки

  4. Кликнул Build

Появляется ошибка:

[BCC32 Error] cwchar(33): E2141 Declaration syntax error

cwchar - это файл, который является частью C ++ Builder, а не Hunspell, как кажется (который только включает его).

Любая помощь в построении статической библиотеки Hunspell (или даже DLL) из C ++ Builder приветствуется.

Заранее спасибо!

Редактировать: я смог продвинуться дальше, используя более позднюю версию C ++ Builder Berlin (вышеупомянутая ошибка была в версии 2010 года), но он по-прежнему сообщал об ошибках компоновщика, поэтому я в конечном итоге использовал DLL - см. Ответ.

1 Ответ

0 голосов
/ 31 августа 2018

Как отмечали Реми Лебо и Руди Велтуис, оказалось, что вместо этого проще использовать DLL. Я также обнаружил еще несколько хитростей, которые я опишу ниже.

1) при попытке создать статический файл lib с помощью C ++ Builder (Берлин) оказалось, что текущий hunspell-1.6.2.zip не компилируется без ошибок. Тем не менее, hunspell-master.zip , который является клоном мастера SVN, он по крайней мере скомпилирован, хотя были некоторые ошибки компоновщика - но я полагал, что мастер-версию лучше использовать в качестве основы для сборки DLL. Поэтому я использовал текущую мастер-версию (https://github.com/hunspell/hunspell).

2) использовал Visual Studio 2015 Community для создания DLL - libhunspell.dll . Чтобы избежать зависимостей, я использовал опцию /MT в компиляторе. У меня было много проблем с использованием версии DLL, которая зависела от VC ++ 2015 Redistributable (ошибки «Access Violation» сразу после вызова некоторых функций DLL), поэтому статически связывая Redistributable для удаления зависимости, все эти проблемы волшебным образом исчезли. Несмотря на то, что компилятор сообщил о некоторых предупреждениях, что, вероятно, является другим вопросом, ему удалось собрать DLL.

3) создал библиотеку импорта, используя implib -a -c -f libhunspell.lib libhunspell.dll

4) наконец, связывается с файлом .cpp с помощью #pragma comment(lib, "libhunspell.lib") (для более старых версий RAD Studio) или #pragma comment(lib, "libhunspell") для более новых версий RAD Studio, которые поддерживают 64-битный компилятор). Другой вариант - добавить lib в проект вместо оператора #pragma.

...