0

BZip2 アーカイブを操作するための無料の Delphi コンポーネントをダウンロードしまし た : http://www.torry.net/vcl/compress/other/BZip21.05.zip /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 ネイティブ ツールを開く」を実行します (% 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 のフォルダ コンポーネントで、古い blocksort.obj、huffman..、compress..、decompress..、bzlib.. の代わりに、新しい *.obj をコピーします。

  8. Delphi を実行し、コンポーネントの再コンパイルを試みます。

エラー「[dcc32 エラー] AbBzip2.pas (215): E2065 Unsatisfied forward or external declaration: 'BZ2_hbMakeCodeLengths'」およびその他の同様のエラーを取得します。

または bzip2.bas の場合 - [dcc32 エラー] BZip2.pas(171): E2065 前方宣言または外部宣言が満たされていません: '_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 makefile を使用してコンパイルすることはできません。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 に答える