我正在尝试在iPhone项目中使用C库。我对iPhone开发非常满意。
My Library

我已经奋斗了几天,试图将这个库构建到一个静态库中,该库可以同时用于模拟器(i386)和ARM7。

使用库的include配置和makefile,我可以毫无问题地构建库。但是,如果我编辑makefile尝试构建相同的库,但以armv7体系结构为目标,则会遇到很多错误。错误似乎报告无法找到某些头文件。

那么,编译器是否会根据目标体系结构尝试在不同位置查找头文件?

这是我编辑过的make文件,试图为armv7生成:

 # $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文件是愚蠢的吗? :)你们忍者忍者如何处理这种情况?一些研究使我相信我需要创建一个通用库。

谢谢!

最佳答案

问题在于/usr/include中的include文件适用于Mac OS X,而不适用于iPhone/iPad。如果您想使事情正常进行,则必须添加(至少)凯在她的评论中提到的标志...

一个更简单的方法是使用XCode。只需创建一个新项目(选择Cocoa Touch静态库)并添加源文件即可。根据Makefile,您需要添加:utils.c dcc.c errors.c Portable.c sockets.c colors.c

希望这可以帮助。

您也可以 checkout IRCClient,它是您正在使用的库的Objective-C包装器。没有意义重塑轮子!

其他信息5/8/11

事实证明,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.c从libircclient/trunk/libircclient/src添加到项目中。事实证明,此文件包括所有其他C文件。

打开项目设置,然后在搜索标题路径中添加../../include。

建立并享受!

关于iPhone-为什么在为ARM体系结构构建时编译器找不到某些包含项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5878292/

10-11 18:31