【问题标题】:How can I include non-framework libraries when writing CodeRunner documents?编写 CodeRunner 文档时如何包含非框架库?
【发布时间】:2012-02-13 16:25:08
【问题描述】:

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

但是,有时我想包含来自非框架的外部来源的功能,例如 ASIHTTPRequest。如果我将 ASIHTTPRequest 文件放在附近的文件夹中并 #include 它们,我会收到有关 "Undefined symbols for architecture x86_64: _OBJC_CLASS_$_ASIHTTPRequest" 的错误,我假设这意味着 ASI 文件根本没有被编译并与 CodeRunner 文档链接 - 这是一个单一的正在编译的文件,而不是项目。在 Xcode 中,我会将 ASIHTTPRequest 文件添加到项目中,它们会自动编译并与其余代码链接,当我不使用 Xcode 时,什么是等效的?

我可以包含自定义参数和编译标志(后者默认包含-std=c99 -framework Foundation),我怀疑我必须以某种方式调整这些,但我无法找到方法。

【问题讨论】:

  • +1 链接到 CodeRunner,很酷的应用程序。

标签: objective-c cocoa coderunner


【解决方案1】:

我让它工作了。当然,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

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

除了 ASIHTTPRequest 标头和 .o 文件之外,gcc 还期望与 SystemConfiguration、CoreServices 框架和 zlib 库链接,因为 ASIHTTPRequest 具有这些依赖项。

如果您要使用此库进行大量测试,我建议将“Objective-C”语言定义(在 Preferences 下)复制为“Objective-C with ASIHTTPRequest”或其他内容。然后,您可以自定义针对 ASIHTTPRequest 运行的编译标志,而无需为您运行的所有 Objective-C 代码执行此操作。

您可能还想将 .o 文件和“LinkFileList”文件复制到一个更永久的位置,以防 Xcode 清除该构建树之类的东西。

【讨论】:

  • 谢谢布拉德!您的参数达到了 99%,但我遇到了关于 main() 的重复定义和 ASIWebPageRequest 错误的错误。我从 LinkFileList 中编辑了 main.o、AppDelegate.o 和 ASIWebPageRequest.o 的链接,现在一切正常!也许你建立了一个不同的 ASIHTTPRequest mac 项目?
  • 啊是的...我也必须这样做。抱歉,我忽略了这一步。
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2012-03-23
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
相关资源
最近更新 更多