설명이 짧은 시간이지만, 현재 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와 연결할 수 없으므로 아무런 의미가 없습니다. 나는 여기서 아이디어가 부족하다.
누구든지 나를 도와 줄 수 있습니까?
내가 명령 줄을 여러 번 확인했는데 -l과 라이브러리 사이에 공백이 없다는 것을 알아 두어야한다. (Google의 모든 검색에서 오류라고 표시됨) –