我正在尝试在 iPhone 项目中使用 C 库。我对 iPhone 开发非常陌生。 My Library
我已经奋斗了几天,试图将这个库构建成一个静态库,我可以将它用于模拟器 (i386) 和 ARM7。
使用库的包含配置和 makefile,我可以毫无问题地构建库。但是,如果我编辑 makefile 以尝试构建同一个库,但以 armv7 架构为目标,我会收到很多错误。错误似乎是报告无法找到某些头文件。
那么编译器会根据目标架构尝试在不同的地方寻找头文件吗?
这是我为 armv7 尝试构建而编辑的 make 文件:
# $Id: Makefile.in 62 2005-03-09 21:11:53Z gyunaev $
CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.2.1
CFLAGS = -Wall -DIN_BUILDING_LIBIRC -O3 -DENABLE_THREADS -D_REENTRANT
AR=ar cr
RANLIB=ranlib
INCLUDES=-I../include
OBJS = libircclient.o
all: lib
lib: libircclient.a
install: lib
-mkdir /usr/local/include
-mkdir /usr/local/lib
cp ../include/libircclient.h /usr/local/include/libircclient.h
cp ../include/libirc_errors.h /usr/local/include/libirc_errors.h
cp ../include/libirc_events.h /usr/local/include/libirc_events.h
cp libircclient.a /usr/local/include/lib/libircclient.a
$(OBJS): utils.c dcc.c errors.c portable.c sockets.c colors.c
libircclient.a: $(OBJS)
$(AR) libircclient.a $(OBJS)
$(RANLIB) libircclient.a
clean:
rm -f libircclient.a $(OBJS)
distclean: clean
-rm -f Makefile
.c.o:
@echo "Compiling $<"
@$(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $<
这是我遇到的编译错误示例:
Compiling libircclient.c
In file included from /usr/include/sys/_types.h:33,
from /usr/include/_types.h:27,
from /usr/include/stdio.h:64,
from portable.c:18,
from libircclient.c:15:
/usr/include/machine/_types.h:36:24: error: arm/_types.h: No such file or directory
In file included from /usr/include/_types.h:27,
from /usr/include/stdio.h:64,
from portable.c:18,
from libircclient.c:15:
/usr/include/sys/_types.h:94: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__darwin_blkcnt_t’
/usr/include/sys/_types.h:95: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__darwin_blksize_t’
/usr/include/sys/_types.h:96: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__darwin_dev_t’
我是不是做错了?编辑 makefile 是愚蠢的吗? :) 你们 unix 忍者如何处理这种情况?一些研究让我相信我需要创建一个通用库...
谢谢!
最佳答案
问题是/usr/include 中的包含文件是针对 Mac OS X 的,而不是针对 iPhone/iPad 的。如果你想让事情正常进行,你必须(至少)添加 Kay 在她的评论中提到的标志......
更简单的方法是使用 XCode。只需创建一个新项目(选择 Cocoa Touch Static Library)并添加源文件。根据 Makefile,您需要添加:utils.c dcc.c errors.c portable.c sockets.c colors.c
希望这对您有所帮助。
您还可以查看 IRCClient这是您正在使用的库的 Objective-C 包装器。没有必要重新发明轮子!
附加信息 2011 年 5 月 8 日
原来 Objective-C 包装器是针对 Mac OS X 而不是 iOS
要编译它,您需要执行以下操作:
获取新鲜的资源:
svn co https://libircclient.svn.sourceforge.net/svnroot/libircclient libircclient
进入libircclient/trunk/libircclient/src目录下运行
./configure
注意:这是一个有点肮脏的技巧。这实际上是针对 Mac OS X 进行的配置,但大多数情况下,事情都非常相似,因此可以正常工作。这会在 include 中生成一个名为 config.h 的文件。
启动 XCode 并选择创建一个新的 Cocoa Touch 静态库。 出现提示时创建一个新目录 libircclient/trunk/libircclient/iOS 并将新项目保存在那里。
将 libircclient/trunk/libircclient/src 中的 libircclient.c 文件添加到项目中。事实证明,该文件包含所有其他 C 文件。
打开您的项目设置并添加 ../../include 到您的搜索标题路径。
构建并享受!
关于iPhone - 为什么编译器在为 ARM 架构构建时找不到某些包含?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5878292/