【问题标题】:Executing code examples from the Leptonica image processing library执行 Leptonica 图像处理库中的代码示例
【发布时间】:2025-12-27 03:35:11
【问题描述】:

我正在尝试编译然后执行 Leptonica 示例程序colorquant_reg.c

事实:

  • 操作系统: Ubuntu

  • 地点:leptonlib-1.67/src/colorquant_reg.c

    (我将它移至src,因为我现在不知道如何告诉编译器缺少的allheaders.h 库文件位于/src 而不是colorquant_reg.c 的原始位置leptonlib-1.67/prog )

  • 我尝试了什么: gcc -I. colorquant_reg -o out

  • 预期结果:我可以用来对我的.tif 文件进行颜色量化的可执行文件。

  • 错误:

    /temp/cckdQZcM.o: In function main':
    colorquant_reg.c:(.text+0x37: undefined reference to regTestSetup
    colorquant_reg.c:(.text+0xa5: undefined reference to regTestCleanup
    /tmp/cckdQZcM.o: In function TestImage'
    colorquant_reg.c:(.text+0xe0: undefined reference to pixRead
    
  • 问题 1:我该如何着手和编译这个程序?

  • 问题 2:是否因为我缺少进一步包含的内容而弹出未定义的引用?

干杯

【问题讨论】:

  • 这些是链接错误 - 您需要链接正确的库以获取这些缺少的函数,或者编译一些附加文件,这些文件是您正在使用的软件包的一部分

标签: c linker compilation


【解决方案1】:

这是我所做的:

  • 下载http://www.leptonica.com/source/leptonlib-1.67.tar.gz
  • 解压到/home/misha/src
  • ./configure; make
  • prog/colorquant_reg.c复制到/home/misha/Desktop/*
  • (可选)根据自己的喜好编辑/home/misha/Desktop/*/colorquant_reg.c——它不再是库的一部分。所以我想这是你可以添加新标题等的地方。

然后,从/home/misha/Desktop/*,我可以使用这个命令编译文件:

export LIBLEPT=/home/misha/src/leptonlib-1.67/
gcc colorquant_reg.c -I$LIBLEPT/src -L$LIBLEPT/src/.libs -llept -o colorquant_reg.out

第一行只是为了方便——我们现在可以使用$LIBLEPT 来引用长路径名。第二行是什么编译:

  • -I 告诉编译器在哪里寻找包含文件
  • -L 告诉编译器在哪里查找库文件(用于链接器)
  • -llept 告诉链接器与 leptonica 链接(它将寻找 liblept.so
  • -o 指定输出文件,现在位于 ~/Desktop/*/colorquant_reg.out

【讨论】:

  • 你能告诉我-llept选项是从哪里来的吗?我已经使用 cygwin 在 Windows 中构建了 leptonica,尽管它已成功构建,但直到使用 -llept 才编译程序。我不知道它是如何工作的。请你告诉我它是如何工作的?