2011-03-07 2 views
0

설명이 짧은 시간이지만, 현재 ARMv7 용 LLVM GCC 프론트 엔드를 컴파일하려고 시도하고 있습니다. Cortex-A8 (iPhone 3GS). 저를 미치게 만들었던 libgcc (gcc 컴파일 과정의 일부)를 컴파일 할 때 LD에서 오류가 발생했습니다!GCC 4.2.1 iPhone 용 Cygwin (Win7 64bit)에서 컴파일

명령은 이것이다 :

/usr/llvm-gcc-4.2-2.8.source/build/./gcc/xgcc \ 
-B/usr/llvm-gcc-4.2_2.8.source/build/./gcc \ 
-B/usr/local/arm-apple-darwin/bin \ 
-B/usr/local/arm-apple-darwin/lib \ 
-isystem /usr/local/arm-apple-darwin/include \ 
-isystem /usr/local/arm-apple-darwin/sys-include \ 
-O2 -g -W -Wall -Wwrite-strings -wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -fno-inline -dynamiclib -nodefaultlibs -W1,-dead_strip \ 
-marm \ 
-install_name /usr/local/arm-apple-darwin/lib/libgcc_s.1.dylib \ 
-single_module -o ./libgcc_s.1.dylib.tmp \ 
-W1,-exported_symbols_list,libgcc/./libgcc.map 
-compatibility_version 1 -current_version 1.0 
-DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc \ 
... long list of .o files ... \ 
-lc 

그리고 그 결과는 일반적으로 일반적으로 libc의이 컴파일지고 있지 않음을 나타냅니다 등의 malloc, 무료, 출구, 정의되지 않은 참조를 많이입니다 겪고 후. ld가 던지는 오류 목록, 맨 위에 /usr/lib/libc.a를 가져 오려고 시도하고 올바른 플랫폼이 아니라고 불평합니다. 그래, 그 말이, 그래서 나는 5 분 구글에 보냈고 대답을 발견했다. libSystem.dylib를 복사하여 libc.dylib로 이름을 바꾸면 문제가 해결되지만 그렇지 않은 것으로 밝혀졌습니다. 내 파일에서 해당 파일의 복사본을 찾을 수 없어서 SDK에서 직접 가져 왔습니다. 그런 다음이 이상한 오류가 발생합니다.

ld64: in /usr/local/arm-apple-darwin/lib/libc.dylib, can't re-map file, errno=22 

이 시점에서 나는 생각할 수있는 모든 것을했습니다. 내 아이폰에서 내/usr/lib 폴더의 새로운 복사본을 움켜 잡고 libSystem.dylib (및 libSystem.B.dylib)가 존재하지 않음을 확인했습니다. iOS 4.2.1 용 .ipsw 패키지를 풀고 다시 한 번 libSystem.dylib 사본을 찾을 수 없었습니다. iPhoneSDK 및 MacOS SDK의 압축을 푼 다음 두 버전 모두에서 해당 사본을 찾을 수 있었지만 그 오류는 계속 지속되었습니다. libSystem.dylib, libSystem.B.dylib를 복사하여 libc.dylib에 이름 바꾸기의 모든 종류의 조합을 시도했지만 여전히 오류가 발생했습니다. 파일과 링크를 인식 할 수있는 방법을 찾을 수 없습니다. 나는 또한 아이폰 SDK에있는 libc.a에 대한 링크를 시도 했는데도 작동하지 않았다. 나는 ./xgcc가 무엇을 발사했는지 확인했다. 그리고 팔짱을 끼얹어 만든 darwin-ld64의 복사본이었다.

약간의 배경이 있습니다. 나는 LLVM + Clang 2.8을 오류없이 구현했으며 Cygwin에서 컴파일하기 위해 ODCCTools를 약간 수정했다. (필자는이 작업을 수행 할 수 있다면 튜토리얼과 함께 패치에 변경 사항을 게시 할 것이다.) 또한 iphone-dev의 "includes"와 "csu"프로젝트를 성공적으로 완료했습니다. 실제로 crt0.a와 연결할 수 없으므로 아무런 의미가 없습니다. 나는 여기서 아이디어가 부족하다.

누구든지 나를 도와 줄 수 있습니까?

+0

내가 명령 줄을 여러 번 확인했는데 -l과 라이브러리 사이에 공백이 없다는 것을 알아 두어야한다. (Google의 모든 검색에서 오류라고 표시됨) –

답변

0

나는 오류를 발견했을 수도 있습니다. ODCCTools 내부, 2905 라인의 ld.cpp 내부에서 파일을 재 맵핑하지 못했습니다 (멋진 메시지). 파일이 충분히 작아 걱정할 필요가 없기 때문에 일시적으로 재 매핑을 제거하고 포인터를 다시 지정했습니다. 잠시 시간을내어 장기적인 해결책 (그리고 Cygwin에서 ODCCTools 패치를 사용하기위한 패치)에 대한 더 나은 해결책을 제시 할 것입니다.

모든 것이 계획대로 진행되면 오늘 밤 Cygwin에서 GCC 컴파일러를 iPhone 용으로 크로스 컴파일해야합니다.

+0

명확한 설명을 위해 ARMv7 컴파일러 가 작동하지 않고 ODCCTools가있는 일반 ARM 어셈블리로 기본 설정됩니다. 그 외에, 모든 것이 작동하고 있으며 나중에 HOWTO를 게시 할 것을 맹세한다. –

+0

나는 이것이 오래된 게시물이지만, 지침 및/또는 cygwin에서 작동하는 아이폰 4s를 타깃으로하는 svn odcctools를 얻기위한 패치를 찾고있다. 내가 찾은 유일한 게시물 인이 문서는 '하우투'를 게시하는 것에 대해 궁금한 점이 있습니까? – crazyhatfish