0

私は code::blocks 10.05 に取り組んでおり、c/c++ で TIFF 画像ファイルを読みたいと思っています。このために、LibTiff ライブラリを使用しているため、tiffio.h をヘッダー ファイルとしてインクルードしています。コンパイルすると、「プロセスはステータス1で終了しました。また、リンカーへのライブラリのフルパスも指定しました。

ビルドログ全体には次のように書かれています:

リンク コンソールの実行可能ファイル: bin\Release\tifff.exe

mingw32-g++.exe: E:\Image: そのようなファイルまたはディレクトリはありません

mingw32-g++.exe: Transforms\Libraries\tifflib\libs\libtiff: そのようなファイルまたはディレクトリはありません

プロセスはステータス 1 (0 分 8 秒) で終了しました 0 エラー、0 警告

4

1 に答える 1

2

あなたが与えた出力を考えると、@ gcbenisonが言ったように、リンカーはlibtiffを見つけていないようです。

さらに、2行の出力が表示されていることを考えると、libtiffライブラリは「E:\ ImageTransforms \ Libraries \ tifflib \ libs \ libtiff」内にあると思いますよね?

ええと、Code::Blocksはスペースのあるパスを好まないようです。したがって、「ImageTransforms」の名前を「Image_Transforms」に変更し、Code :: Blocksのライブラリパスを修正して、再試行してください。

編集:答えについて詳しく説明します

また、コンパイルされたlibtiffライブラリを使用できるようにしてください。GNUwin32プロジェクトからlibtiff3.8.2-1.exeをダウンロードしてテストしましたが、問題なく動作しました。libtiffを使用する最小限の動作をするプログラムを作成するには、次のことを試してください。

  • 前述のlibtiffライブラリをC:\GnuWin32にインストールします。インストールすると、bin、contrib、doc、include、libなど、その中に多くのディレクトリが作成されます。
  • Code::Blocksで新しいコンソールアプリケーションプロジェクトを作成します。
  • Code::BlocksにCプログラムであることを伝えます。
  • プロジェクトが作成されたら、プロジェクトをクリックしてから[ビルドオプション...]をクリックして、[ビルドオプション]ダイアログにアクセスします。
  • [リンカー設定]タブの[ライブラリのリンク]フレームで、[追加]をクリックしてlibtiff.dll.aを追加します。libtiffをC:\ GnuWin32にインストールした場合、必要なライブラリはC:\ GnuWin32 \ lib\libtiff.dll.aになります。
  • [ディレクトリの検索]タブでは、次のことを行います。
    • [コンパイラ]タブを選択し、それに「C:\ GnuWin32\include」を追加します。
    • [リンカー]タブを選択し、それに「C:\ GnuWin32\lib」を追加します。
  • これですべてが正常になっているはずなので、[ビルドオプション]ダイアログで[OK]をクリックします。

プログラムをビルドしてみて、ビルドが成功するかどうかを確認できます。libtiffを使用したグラフィックプログラミングの最初の例、パート2をテストプログラムとして使用しました。

#include <stdio.h>
#include <stdlib.h>
#include <tiffio.h>
int main()
{
  TIFF *output;
  uint32 width, height;
  char *raster;
  printf("Trying to write TIFF...\n");
  if((output = TIFFOpen("output.tif", "w")) == NULL){
    fprintf(stderr, "Could not open outgoing image\n");
    exit(42);
  }
  width = 42;
  height = 42;
  if((raster = (char *) malloc(sizeof(char) * width * height * 3)) == NULL){
    fprintf(stderr, "Could not allocate enough memory\n");
    exit(42);
  }
  TIFFSetField(output, TIFFTAG_IMAGEWIDTH, width);
  TIFFSetField(output, TIFFTAG_IMAGELENGTH, height);
  TIFFSetField(output, TIFFTAG_COMPRESSION, COMPRESSION_DEFLATE);
  TIFFSetField(output, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
  TIFFSetField(output, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
  TIFFSetField(output, TIFFTAG_BITSPERSAMPLE, 8);
  TIFFSetField(output, TIFFTAG_SAMPLESPERPIXEL, 3);
  if(TIFFWriteEncodedStrip(output, 0, raster, width * height * 3) == 0){
    fprintf(stderr, "Could not write image\n");
    exit(42);
  }
  TIFFClose(output);
  printf("TIFF written successfully.\n");
  return 0;
}

次に、ビルド(Ctrl + F9)してプログラムを実行してみます。上記の手順に従い、プログラムをコンパイルして動作させました。

ビルドの場合、Code :: Blocksの出力は次のとおりです(プログラムにlibtiffという名前を付けました):

-------------- Build: Debug in libtiff ---------------

Compiling: main.c
Linking console executable: bin\Debug\libtiff.exe
Output size is 27,93 KB
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings

実行の場合、次のように出力されます。

Trying to write TIFF...
TIFF written successfully.

Process returned 0 (0x0)   execution time : 0.125 s
Press any key to continue.
于 2012-05-29T22:07:34.237 に答える