我让它工作。当然,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 清理掉构建树之类的东西。