在 C++ Builder 中将 Hunspell 编译为静态库
Compiling Hunspell as static library in C++ Builder
我正在尝试在 C++ Builder 中使用 Hunspell DLL,但遇到了麻烦。
所以我尝试求助于编译为静态库。但即便如此,也并非一帆风顺。到目前为止我执行的步骤:
下载了最新的Hunspell
解压缩并在 C++ Builder 中创建 - 新建/其他/静态库
右键单击并添加了 src/hunspell
文件夹中的所有 *.cxx 文件
点击了Build
出现的错误是:
[BCC32 Error] cwchar(33): E2141 Declaration syntax error
cwchar 是一个文件,它是 C++ Builder 的一部分,而不是看起来的 Hunspell(只包含它)。
对从 C++ Builder 构建静态 hunspell 库(甚至 DLL)的任何帮助表示赞赏。
提前致谢!
编辑:我能够通过使用更新的 C++ Builder Berlin 取得进一步进展(上述错误出现在 2010 版本中)但它仍然报告链接器错误,所以我最终使用了 DLL - 请参阅答案。
正如 Remy Lebeau 和 Rudy Velthuis 指出的那样,事实证明使用 DLL 更容易。我还发现了一些我将在下面描述的方法。
1) 当尝试使用 C++ Builder (Berlin) 创建静态库文件时,结果是当前的 hunspell-1.6.2.zip 没有编译错误。然而,hunspell-master.zip 是 SVN master 的克隆,它至少编译了,虽然有一些链接器错误 - 但我认为 master 版本更好用作构建 DLL 的基础。所以我用的是现在的master版本(https://github.com/hunspell/hunspell).
2) 使用 Visual Studio 2015 社区构建 DLL - libhunspell.dll。为了避免依赖性,我在编译器中使用了 /MT
选项。我在使用依赖于 VC++ 2015 Redistributable 的 DLL 版本时遇到很多问题(调用某些 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")
(对于支持 64 位编译器的较新 RAD Studio 版本)链接到 .cpp 文件。另一种选择是将 lib 添加到项目而不是 #pragma
语句。
我正在尝试在 C++ Builder 中使用 Hunspell DLL,但遇到了麻烦。
所以我尝试求助于编译为静态库。但即便如此,也并非一帆风顺。到目前为止我执行的步骤:
- 下载了最新的Hunspell
解压缩并在 C++ Builder 中创建 - 新建/其他/静态库
右键单击并添加了
src/hunspell
文件夹中的所有 *.cxx 文件点击了
Build
出现的错误是:
[BCC32 Error] cwchar(33): E2141 Declaration syntax error
cwchar 是一个文件,它是 C++ Builder 的一部分,而不是看起来的 Hunspell(只包含它)。
对从 C++ Builder 构建静态 hunspell 库(甚至 DLL)的任何帮助表示赞赏。
提前致谢!
编辑:我能够通过使用更新的 C++ Builder Berlin 取得进一步进展(上述错误出现在 2010 版本中)但它仍然报告链接器错误,所以我最终使用了 DLL - 请参阅答案。
正如 Remy Lebeau 和 Rudy Velthuis 指出的那样,事实证明使用 DLL 更容易。我还发现了一些我将在下面描述的方法。
1) 当尝试使用 C++ Builder (Berlin) 创建静态库文件时,结果是当前的 hunspell-1.6.2.zip 没有编译错误。然而,hunspell-master.zip 是 SVN master 的克隆,它至少编译了,虽然有一些链接器错误 - 但我认为 master 版本更好用作构建 DLL 的基础。所以我用的是现在的master版本(https://github.com/hunspell/hunspell).
2) 使用 Visual Studio 2015 社区构建 DLL - libhunspell.dll。为了避免依赖性,我在编译器中使用了 /MT
选项。我在使用依赖于 VC++ 2015 Redistributable 的 DLL 版本时遇到很多问题(调用某些 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")
(对于支持 64 位编译器的较新 RAD Studio 版本)链接到 .cpp 文件。另一种选择是将 lib 添加到项目而不是 #pragma
语句。