2012-01-18 67 views
4

我一直在使用CodeRunner来收集在开发过程中经常使用的小块代码,但不一定属于项目的代码库。这是一个在Objective-C和Cocoa中总结的好工具,因为我可以包含安装在我的机器上的框架。如何在编写CodeRunner文档时包含非框架库?

但是,有时我想包含来自不是框架的外部来源的功能,例如ASIHTTPRequest。如果我将ASIHTTPRequest文件放置在附近的文件夹中,并且我遇到了有关"Undefined symbols for architecture x86_64: _OBJC_CLASS_$_ASIHTTPRequest"的错误,我认为这意味着ASI文件不会被编译并与CodeRunner文档链接 - 这是一个正在编译的单个文件,不是一个项目。在Xcode中,我会将ASIHTTPRequest文件添加到项目中,并自动将其编译并与代码的其余部分进行链接,当我不使用Xcode时,相当于什么?

我可以包括自定义参数和编译标志(后者默认包含-std=c99 -framework Foundation),我怀疑我不得不调整这些,但我一直无法找到如何。

+0

+1链接到CodeRunner,很酷的应用程序。 – 2012-01-24 02:39:01

回答

3

我得到它的工作。当然,gcc需要一些额外的参数来链接到ASIHTTP模块。这是我结束了:

-std=c99 -framework SystemConfiguration -framework CoreServices -framework Foundation -lz -I/path/to/asi-header-files -filelist /path/to/list-of-asi-compiled-modules 

我想,你的代码只是包括路径的ASIHTTPRequest.h等头文件...如果你使用有明确的路径,你不需要-I在上面切换。 gcc确实需要有一个来自ASIHTTPRequest.m的编译版本的代码和朋友来链接它。一种方法是编译库中附带的“Mac”项目。这将在Xcode喜欢制作的深埋“DerivedData”目录之一中生成.o文件。它为我做的一个是:

~/Library/Developer/Xcode/DerivedData/Mac-flsjygxmngizhzfwnfgcakejmwkx/Build/Intermediates/Mac.build/Debug/Mac.build/Objects-normal/x86_64 

(“陆委会-flsjygxmngizhzfwnfgcakejmwkx”位会为你不同,我想。)在该目录中,也有.o文件一堆和“Mac.LinkFileList '文件。这个文件是您为gcc提供-filelist参数的文件。您需要删除对main.o,AppDelegate.o和ASIWebPageRequest.o文件的引用,以免在链接步骤中出现重复的符号错误。

除了ASIHTTPRequest头和.o文件,gcc将期望与SystemConfiguration,CoreServices框架和zlib库链接,因为ASIHTTPRequest具有这些依赖关系。

如果你正在用这个库做很多测试,我会建议在Objective-C中用Objective-C和ASIHTTPRequest来复制“Objective-C”语言定义(在Preferences下)。然后,您可以自定义针对ASIHTTPRequest运行的编译标志,而不必为所运行的所有Objective-C代码执行该标志。

您可能还想将.o文件和“LinkFileList”文件复制到更加固定的位置,以防万一Xcode清理掉构建树或其他东西。

+0

谢谢布拉德!你的参数有99%的方式,但我遇到了有关ASIWebPageRequest的main()和错误重复定义的错误。我编辑了LinkFileList中main.o,AppDelegate.o和ASIWebPageRequest.o的链接,现在一切正常。也许你建立了一个不同的ASIHTTPRequest mac项目? – Nick 2012-01-28 17:18:26

+0

啊,是的......我也必须这样做。对不起,我忽视了这一步。 – 2012-01-28 21:25:33