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。

更重要的是,鉴于它显示了两行输出,我假设您的 libtiff 库位于“E:\Image Transforms\Libraries\tifflib\libs\libtiff”中,对吧?

好吧,Code::Blocks似乎不喜欢带空格的路径。所以尝试将“Image Transforms”重命名为“Image_Transforms”,更正 Code::Blocks 中的库路径并重试。

编辑:详细说明答案

另外,请确保您可以拥有已编译的 libtiff 库。我从GNUwin32项目下载了libtiff 3.8.2-1.exe进行测试,它运行良好。尝试执行以下操作来构建使用 libtiff 的最小工作程序:

  • 在 C:\GnuWin32 中安装上述 libtiff 库。安装好之后,里面会有很多目录,包括bin、contrib、doc、include、lib等等;
  • 在 Code::Blocks 中新建一个Console 应用项目;
  • Tell Code::Blocks 它是一个 C 程序;
  • 创建项目后,通过单击您的项目然后单击“构建选项...”访问“构建选项”对话框;
  • 在“链接器设置”选项卡的“链接库”框架中,单击“添加”并添加 libtiff.dll.a。如果你在 C:\GnuWin32 中安装了 libtiff,你想要的库将是 C:\GnuWin32\lib\libtiff.dll.a;
  • 在“搜索目录”选项卡中,您将:
    • 选择“编译器”选项卡并在其中添加“C:\GnuWin32\include”;
    • 选择“链接器”选项卡并将“C:\GnuWin32\lib”添加到其中;
  • 在“构建选项”对话框中单击“确定”,因为现在一切都应该没问题了。

您现在可以尝试构建您的程序,看看构建是否成功。我使用了使用 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 回答