gpt4 book ai didi

objective-c - 在编写 CodeRunner 文档时如何包含非框架库?

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:47 25 4
gpt4 key购买 nike

我一直在使用 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)我怀疑我必须以某种方式调整这些但我一直无法找到怎么办。

最佳答案

我让它工作了。当然,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 和 friend 的代码的编译版本才能与之链接。一种方法是编译库附带的“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 header 和 .o 文件之外,gcc 还希望链接到 SystemConfiguration、CoreServices 框架和 zlib 库,因为 ASIHTTPRequest 具有这些依赖项。

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

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

关于objective-c - 在编写 CodeRunner 文档时如何包含非框架库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8918804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com