2012-01-18 2 views
4

저는 개발 중에 자주 사용되는 코드 덩어리를 수집하기 위해 CodeRunner을 사용 했었지만 반드시 프로젝트의 코드베이스에 속하지는 않습니다. 그것은 내 컴퓨터에 설치된 프레임 워크를 포함 할 수 있기 때문에 Objective-C 및 Cocoa에서 요약하기에 훌륭한 도구입니다.CodeRunner 문서를 작성할 때 프레임 워크가 아닌 라이브러리를 포함하려면 어떻게해야합니까?

그러나 때때로 ASIHTTPRequest와 같은 프레임 워크가 아닌 외부 소스의 기능을 포함하고자합니다. 내가 ASIHTTPRequest 파일을 근처에있는 폴더에 넣고 #include 파일을 배치하면 "Undefined symbols for architecture x86_64: _OBJC_CLASS_$_ASIHTTPRequest"에 대한 오류가 발생합니다. 이는 ASI 파일이 단순히 컴파일되지 않고 CodeRunner doc과 연결되지 않았다고 가정합니다.이 파일은 컴파일되는 단일 파일이며, 프로젝트가 아닙니다. Xcode에서 ASIHTTPRequest 파일을 프로젝트에 추가하면 자동으로 컴파일되어 나머지 코드와 연결됩니다. Xcode를 사용하지 않을 때 동등한 기능은 무엇입니까?

커스텀 인수와 컴파일 플래그를 포함 할 수 있습니다. (후자는 기본적으로 -std=c99 -framework Foundation을 포함하고 있습니다.) 어떻게 든 이들을 조정할 필요가 있지만 어떻게 찾을 수 없었습니다.

+0

CodeRunner에 대한 링크는 +1입니다. 멋진 앱입니다. –

답변

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에 대한 경로 포함 된 코드 등 헤더 파일은 ..., 당신은 필요하지 않습니다 : 여기에 결국 무엇 - 위 스위치. 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에는 이러한 종속성이 있으므로 gcc는 ASIHTTPRequest 헤더 및 .o 파일 외에도 SystemConfiguration, CoreServices 프레임 워크 및 zlib 라이브러리와 연결될 것으로 예상합니다.

이 라이브러리로 많은 테스트를 수행 중이라면 환경 설정 아래의 "Objective-C"언어 정의를 "Objective-C with ASIHTTPRequest"라고 복제하는 것이 좋습니다. 그런 다음 ASIHTTPRequest에 대해 실행하는 컴파일 플래그를 사용자 정의하여 실행할 모든 Objective-C 코드에 맞게 컴파일 플래그를 사용자 정의 할 수 있습니다.

.o 파일과 "LinkFileList"파일을 더 영구적 인 장소에 복사 할 수도 있습니다. Xcode가 해당 빌드 트리를 정리하거나 제거 할 경우를 대비하여.

+0

Brad에게 감사합니다! 귀하의 매개 변수가 거기에 99 %의 방법을 가지고 있지만 ASIWebPageRequest와 함께 main()과 오류의 중복 정의에 관한 오류가 발생했습니다. LinkFileList에서 main.o, AppDelegate.o 및 ASIWebPageRequest.o에 대한 링크를 편집했으며 이제는 모든 것이 잘 작동합니다! 어쩌면 당신은 다른 ASIHTTPRequest 맥 프로젝트를 만들었습니까? – Nick

+0

아 맞아 ... 나도해야만했다. 죄송합니다. 단계를 언급하지 않았습니다. –

관련 문제