0

我下载了一个免费的 Delphi 组件来使用 BZip2-archives: http ://www.torry.net/vcl/compress/other/BZip21.05.zip (更有经验的单元 AbBzip2.pas 组件缩写 http://sourceforge.net /projects/tpabbrevia/files/ ) - 它们非常相似。

组件运行良好。

问题:

  1. 我看到组件中的版本 *.obj 文件 BZip2 库 - 是旧的 - 2007 年 12 月 10 日的 1.0.5。决定将 obj 文件更新为新文件。

  2. 我要去下载最新版本的 BZip2 - 1.0.6 - http://www.bzip.org/downloads.html

  3. 将源 BZip2 存档解压缩到文件夹 c:\BZip2Src

  4. 运行“打开命令行VS2012 x86 Native Tools”(%comspec%/k""C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat""x86)

  5. 在控制台中,我转到 c:\BZip2Src (Cd /dc:\BZip2Src)

  6. 按照 makefile.msc (#usage: nmake.exe -f makefile.msc) 中的说明编译项目并获取新的 *.obj 文件。一路走来,得到一个工作程序bzip2.exe。

  7. 在 Delphi 的文件夹组件中复制新的 *.obj 而不是旧的 blocksort.obj、huffman..、compress..、decompress..、bzlib..。

  8. 运行 Delphi,尝试重新编译组件。

得到错误“[dcc32 Error] AbBzip2.pas (215): E2065 Unsatisfied forward or external declaration: 'BZ2_hbMakeCodeLengths'”等类似错误。

或对于 bzip2.bas - [dcc32 错误] BZip2.pas(171): E2065 Unsatisfied forward or external declaration: '_BZ2_hbMakeCodeLengths'

...
{$L huffman.obj}
{$L compress.obj}
{$L decompress.obj}
{$L bzlib.obj}

{ $L crctable.obj}
{ $L randtable.obj}

{$IFDEF LFS}
uses
  Windows;
{$ENDIF}

procedure _BZ2_hbMakeCodeLengths; external; // **ERROR LINE** 
procedure _BZ2_blockSort; external;  // if i replace on "BZ2_blockSort" (without "_"), i get error "[dcc32 Error] BZip2.pas(710): E2065 Unsatisfied forward or external declaration: 'bz_internal_error'"
procedure _BZ2_hbCreateDecodeTables; external;
...

我不能在 C++ 命令行中没有任何修改的情况下指出所有选项编译器吗?

不适用于 C++,帮助正确编译 *.obj 文件。

4

1 回答 1

3

Pascal 文件旨在与以非常特定的方式编译的 .obj 文件一起使用。您不能使用 bzip2 生成文件进行编译。您需要以与 Delphi 库兼容的特定方式编译文件。

看看缩写。在sourceforge 存储库中,我们有这个:

bzip2 SDK v1.0.6

可从 http://bzip.org/1.0.6/bzip2-1.0.6.tar.gz 获得原始下载

编译 32 位
  bcc32 -q -c -u- -w-8004 -w-8008 -w-8057 -w-8066 -w-8068 -DBZ_NO_STDIO *.c

用 64 位编译
  cl -c -nologo -GS- -Z7 -wd4068 -Gs32768 -DBZ_NO_STDIO *.c

因此,这告诉您 32 位 Abbrevia 旨在与 bcc32 编译的目标文件一起使用(使用该特定命令行)。也许您也可以使用它cl。当然,Craig 已经成功地为他的 64 位构建做到了这一点。

在您的问题中,您声明 Abbrevia 中使用的 bzip2 文件已过时,并且您希望使用 1.0.6。好吧,这种说法是不正确的。您显然已经得到了过时的 Abbrevia 版本。

您应该从 sourceforge 存储库中提取最新版本的 Abbrevia,它带有 bzip2 1.0.6 的 .obj 文件。正是您正在寻找的。如果您希望对 bzip2 源代码文件进行一些修改,您可以这样做并使用上面的命令行重新编译它们。

于 2013-08-06T09:18:13.023 回答