【问题标题】:Xcode does not recognize TIFF functionsXcode 无法识别 TIFF 函数
【发布时间】:2015-10-27 23:33:33
【问题描述】:

我一直在尝试运行使用 tiffutils 处理 TIFF 图像的代码。我遇到了旧的“架构 x86_64 的未定义符号,已经在这里多次出现。但是,没有一个线程有助于解决我的问题。错误描述如下:

Undefined symbols for architecture x86_64:
  "_TIFFClose", referenced from:
      _GetImageFromTiff in tiffutils.o
      _WriteImageToTiff in tiffutils.o
  "_TIFFGetField", referenced from:
      _GetImageFromTiff in tiffutils.o
  "_TIFFOpen", referenced from:
      _GetImageFromTiff in tiffutils.o
      _WriteImageToTiff in tiffutils.o
  "_TIFFReadScanline", referenced from:
      _GetImageFromTiff in tiffutils.o
  "_TIFFScanlineSize", referenced from:
      _GetImageFromTiff in tiffutils.o
  "_TIFFSetField", referenced from:
      _WriteImageToTiff in tiffutils.o
  "_TIFFWriteScanline", referenced from:
      _WriteImageToTiff in tiffutils.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

经过多次尝试并在互联网上寻求解决方案后,我意识到问题一定是 Xcode 无法检测到 tiff 库。编译器似乎抱怨无法识别 tiff 库中的一些非常核心的函数。我不明白这是怎么可能的,因为我确实确保它已安装并且我在 Xcode 的构建设置中包含了 libtiff 库。

我不知道还能做什么,所以我希望你们能在这里帮助我。有什么建议吗?

**更多可能有用的信息(不确定我是否需要全部,这个项目是很久以前在 Linux 上编写的,我正在尝试在 Mac OS 上编译它):

(1) 我的 libtiff 库位于:usr/local/libtiff-4.0.6 (2) 我将它添加到我的目标,然后是 Build Setting --> Library Search Paths,然后单击右列并将库 usr/local/libtiff-4.0.6 添加到其中。 (3) 我的项目Makefile是这样的:

# Makefile for creating shape-texture spaces

TIFFUTILS_DIR = ../../tiffutils

CC =        gcc

CPPFLAGS=   -O3 -m32 -I$(TIFFUTILS_DIR) -I/usr/include -Wall

LDFLAGS =   -m32 -L$(TIFFUTILS_DIR)/bin -L/usr/lib
LOADLIBES =     -ltiffutils -ltiff

vpath %.c ..

SRC2_C =    bimgalloc.c bimgio.c btof.c btol.c btos.c canny2.c \
       die.c fileutils.c filtsub.c fimgalloc.c fimgio.c freflect.c \
       ftob.c ftol.c ftos.c imgalloc.c limgalloc.c limgio.c ltob.c \
       ltof.c ltos.c nint.c simgalloc.c simgio.c stob.c stof.c stol.c \
       timgio.c

SRC2_O =    $(SRC2_C:.c=.o)

canny2: $(SRC2_O)

SRC_C = bimgalloc.c bimgio.c btof.c btol.c btos.c canny.c \
       die.c fileutils.c filtsub.c fimgalloc.c fimgio.c freflect.c \
       ftob.c ftol.c ftos.c imgalloc.c limgalloc.c limgio.c ltob.c \
       ltof.c ltos.c nint.c simgalloc.c simgio.c stob.c stof.c stol.c \
       timgio.c

SRC_O = $(SRC_C:.c=.o)

canny: $(SRC_O)

clean:
    rm *.o canny canny2

#
# EOF
#

(4) 我还有一个 tiffutils Makefile,看起来像这样:

LIB =       libtiffutils.a

CC =        gcc
ARFLAGS =   ursv
CPPFLAGS=   -I.. -Wall -O3 -m32

vpath %.c ..

LIB_TIFFUTILS_C = tiffutils.c
LIB_TIFFUTILS_O = $(LIB_TIFFUTILS_C:.c=.o)

all: libtiffutils

libtiffutils: $(LIB_TIFFUTILS_O)
    $(AR) $(ARFLAGS) $(LIB) $(LIB_TIFFUTILS_O)


clean:
    rm $(LIB) $(LIB_TIFFUTILS_O)

感谢您阅读本文!

【问题讨论】:

  • 请发布有关 tiff 库的安装位置以及您如何告诉 xcode 找到该库的详细信息。你可以发布自动生成的makefile
  • @user3629249 已添加,谢谢!
  • 相对路径:TIFFUTILS_DIR = ../../tiffutils 与您声明库的实际位置之间似乎存在差异:`usr/local/libtiff-4.0.6` make 操作将失败,除非它从库所在的上一个目录和下两个目录运行。您是否检查过该目录 /usr/local/libtiff-4.0.6//tiffutils 以查看存档文件 libtiffutils.a(或者 libtiffutils.so 是否确实存在?
  • 为什么你的项目会位于 /usr/local/ 而不是 /home/$(login)/project? (或 /home/ 下的一些非常相似的目录?)一般来说,库路径应该从 / 开始,而不是相对于您的项目所在的位置。
  • @user3629249 我已经检查过了,我确实有指向 libtiffutils.a 的正确路径。当我检查我在 Xcode GUI 中包含的所有库路径时,没有任何操作丢失。所有需要的文件都在那里。也许 Xcode 不读取我的 Makefile?还是 tiffutils Makefile?这可能吗?基本上我所做的是将项目的 Makefile 添加到源代码列表(但未选中目标成员资格框),假设 xCode 会知道如果它存在就运行它。另外,我将它引用到库搜索路径上的 tiffutils Makefile。 Xcode 会知道阅读它吗?

标签: c xcode compiler-errors libtiff


【解决方案1】:

在 Xcode 中,转到项目设置,常规选项卡。在 Embedded binaries session 下,添加您的库。希望有所帮助

【讨论】:

  • 感谢您的回复@sahara108。正如我所提到的,我正在尝试为 Mac OS X 操作系统进行编译。嵌入式二进制文件适用于 IOS 应用程序。也许相当于将库添加到构建设置下的“库搜索路径”,我已经尝试过了..
【解决方案2】:

您的项目在您的计算机上的什么位置?

我希望它位于:

/home/<username>/<projectname>

并且您已声明 tiffutils 位于:

/usr/local/libtiff-4.0.6/tiffutils

makefile 中的相对路径说(顺便说一句:为什么是相对路径?)

(逐步分解。)

/home/<username> leaves ../tiffutils/libtiffutils.

/home/tiffutils/libtiffutils.

这绝对不一样:

/usr/local/libtiff-4.0.6/tiffutils/libtiffutils.

所以库的路径需要是一个绝对路径,如下所示:

/usr/local/libtiff-4.0.6/tiffutils

【讨论】:

  • 好的,我明白了.. 虽然我在 makefile 上所做的更改似乎没什么关系。就好像 Xcode 根本不读取 makefile。这就是为什么我问是否有特定的方法告诉 Xcode 有一个现有的 Makefile 要读取,或者我只是将它添加到源列表中?
猜你喜欢
  • 2018-12-19
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多