【问题标题】:Compiling Hunspell as static library in C++ Builder在 C++ Builder 中将 Hunspell 编译为静态库
【发布时间】:2018-08-29 15:35:39
【问题描述】:

我正在尝试在 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 - 请参阅答案。

【问题讨论】:

  • 大多数 3rd 方库与 C++Builder 开箱即用不兼容(主要是因为 Borland 编译器因太旧且不值得支持而声名狼藉,直到最近几年 Embarcadero 发布新的 C++11 和很快的 C++17 编译器)。这样的库通常需要先进行一些调整。您在使用 DLL 时遇到的实际问题是什么?您可能只是没有正确使用它,这可能比尝试重新编译整个库更容易修复。另外,您使用的是哪个版本的 C++Builder?
  • 正如 Remy 所说,如果您已经有一个 DLL,那么 使用 DLL 应该很容易,而不是重新编译。因此,请告诉我们您在使用 DLL 时遇到了什么问题。
  • 感谢您的帮助 - 正如您所说,一旦我弄清楚如何从 DLL 中删除依赖项,使用 DLL 会更容易。我会写一个答案来描述这一点。不过,我创建了一个新问题 - stackoverflow.com/questions/52121623/…

标签: c++ c++builder hunspell


【解决方案1】:

正如 Remy Lebeau 和 Rudy Velthuis 所指出的,事实证明使用 DLL 更容易。在此过程中,我还发现了更多技巧,我将在下面描述。

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

2) 使用 Visual Studio 2015 Community 构建 DLL - libhunspell.dll。为了避免依赖,我在编译器中使用了/MT 选项。我在使用依赖于 VC++ 2015 Redistributable 的 DLL 版本时遇到了很多问题(在调用某些 DLL 函数后立即出现“访问冲突”错误),因此静态链接 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 语句。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2012-05-29
    • 2019-10-12
    • 2015-03-06
    相关资源
    最近更新 更多