【发布时间】: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