在C ++ Builder中将Hunspell编译为静态库

问题描述 投票:0回答:1

我试图在C ++ Builder中使用Hunspell DLL但只有麻烦。

所以我尝试编译为静态库。但即使这样也不顺利。我到目前为止所做的步骤:

  1. https://github.com/hunspell/hunspell/releases下载了最新的Hunspell
  2. 在C ++ Builder中解压缩并创建 - 新建/其他/静态库
  3. 右键单击并添加src/hunspell文件夹中的所有* .cxx文件
  4. 点击Build

出现的错误是:

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

cwchar是一个文件,它是C ++ Builder的一部分而不是Hunspell(它只包括它)。

从C ++ Builder构建静态hunspell库(甚至DLL)的任何帮助表示赞赏。

提前致谢!

编辑:我能够通过使用更新的C ++ Builder Berlin进一步发展(上面的错误是在2010版本中),但它仍然报告了链接器错误,所以我最终使用了DLL - 请参阅答案。

c++ c++builder hunspell
1个回答
0
投票

正如Remy Lebeau和Rudy Velthuis指出的那样,事实证明使用DLL更容易。我还发现了一些技巧,我将在下面介绍。

1)当尝试使用C ++ Builder(柏林)创建静态lib文件时,结果发现当前的hunspell-1.6.2.zip没有编译而没有错误。但是,hunspell-master.zip是SVN主机的一个克隆,它至少编译过,虽然有一些链接器错误 - 但我认为主版本最好用作构建DLL的基础。所以我使用了当前的主版本(https://github.com/hunspell/hunspell)。

2)使用Visual Studio 2015社区构建DLL - libhunspell.dll。为了避免依赖,我在编译器中使用了/MT选项。我使用DLL版本时遇到了很多问题,这个版本依赖于VC ++ 2015 Redistributable(调用一些DLL函数后立即出现“Access Violation”错误),因此静态链接Redistributable以删除依赖项,所有这些问题都神奇地消失了。即使编译器报告了一些可能是另一个问题的警告,它确实设法构建了DLL。

3)使用implib -a -c -f libhunspell.lib libhunspell.dll创建导入库

4)最后,使用#pragma comment(lib, "libhunspell.lib")(对于较旧的RAD Studio版本)或#pragma comment(lib, "libhunspell")链接到.cpp文件,用于支持64位编译器的较新RAD Studio版本。另一个选择是将lib添加到项目而不是#pragma语句。

© www.soinside.com 2019 - 2024. All rights reserved.