Xcode 링커 오류 : 아키텍처 x86_64에 비해 파일이 너무 작습니다.


88

Xcode에서 응용 프로그램을 개발 중입니다.

빌드하려고 할 때 다음 오류가 발생합니다.

ld: in /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o, file too small for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

아무도 무엇이 잘못되었는지 알고 있습니까?


59
전체 재 구축 / 청소를 시도하십시오. 이전 빌드가 비정상적으로 중단되어 TWRAppDelegate.o파일이 손상되거나 크기가 0 일 수 있습니다.
Martin Baulig 2012

5
약간의 정밀화 : cmd + shift + k를 사용하여 수행합니다. 작동하지 않으면 파생 된 데이터 폴더로 이동하여 프로젝트 이름의 폴더를 삭제합니다.
Ramy Al Zuhouri

3
@RamyAlZuhouri : 더 이상 빌드 폴더를 직접 휴지통으로 갈 필요가 없습니다. Option 키를 누른 상태에서 Clean 명령 (제품 메뉴에 있음)이 "Clean Build Folder…"로 변경됩니다.
Peter Hosey

Martin Baulig의 제안이 내 문제를 해결했습니다. 감사!
tbodt

2
@PeterK. 그것은 나에게 좋은 질문 실버 배지 :-) 버는
tbodt

답변:


186

@ martin-baulig의 답변 훔치기 :

전체 재 구축 / 청소를 시도하십시오. 이전 빌드가 비정상적으로 중단되어 TWRAppDelegate.o 파일이 손상되거나 크기가 0 일 수 있습니다.


7
드디어! 당신은 그럴 자격이 있습니다.
tbodt 2015

감사! :-) 글쎄, @ martin-bailig의 의견에 대한 답변은 나를 도왔지만 여기에 실제 답변으로 갖는 것이 더 낫습니다.
Peter K.

2
내 프로젝트를 빌드하는 데 시간이 걸립니다. 모든 것이 아니라 비정상적으로 빌드를 중지하면 손상되는 1-4 개 오브젝트 파일 만 삭제하면됩니다.
Fernando Mazzon

20

일반적으로 문제의 파일에 공백 (해당 문제에 대한 임의의 문자가 될 수 있음)을 추가하고 제거하고 저장합니다. 깨끗한 빌드보다 쉽고 빠릅니다.


2
귀하의 답변으로 프로젝트를 재 구축하는 데 10 분을 절약 할 수 있습니다! 감사합니다
Accid Bright

8

이 문제를 자동으로 수정하려면 Build Script Phase추가 할 수 있습니다. Xcode-> Your Project-> Your Target-> Build Phases-> +-> New Run Script Phase로 이동합니다.

이름을로 바꾸고 단계 Xcode Link Fix위로 이동하십시오 Compile Sources. 이것을 스크립트 본문에 붙여 넣으십시오.

# Legacy build system
legacy_dir=`dirname "${LD_DEPENDENCY_INFO_FILE}"`
if [ -d "${legacy_dir}" ]; then
    find "${legacy_dir}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

# New build system
if [ -d "${OBJECT_FILE_DIR_normal}" ]; then
    find "${OBJECT_FILE_DIR_normal}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

이 스크립트는 크기가 0 인 개체 파일을 확인하고 제거하므로 다음 단계에서 컴파일이 완료되면 성공합니다.

많은 경우 모든 앱 대상에 대해이 스크립트를 추가해야합니다.

이 스크립트는 실행하는 데 ~ 0.1 초가 걸리며 전체 프로젝트를 다시 빌드하지 않아도됩니다.


그것은 관대합니다! 모든 프로젝트에 필요합니다.
Nik Kov


5

터미널 앱에서 cmd를 실행하여이 파일을 제거하십시오.

rm /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o


1
큰 프로젝트를 완전히 정리 / 빌드하는 것보다 훨씬 빠르게 같은 방식으로 해결했습니다. 다음에 @Anton Plebanovich의 솔루션을 시도해 보겠습니다.이 수정을 자동화하는 훌륭한 방법이 될 수 있습니다.
Romano

2

완전한 캐시 정리없이 오류를 수정하는 빠른 방법 :

  1. 오류로 설명 된 파일 열기 (이 질문의 경우 TWRAppDelegate )
  2. cmd + A
  3. cmd + X
  4. 재 구축-실패
  5. cmd + V
  6. 재 구축-성공

1

깨끗한 프로젝트를 빌드하는 데 시간이 너무 오래 걸릴 수 있으므로 캐시에서 손상된 파일에 대한 액세스 권한이있는 사용자에게는 더 짧은 방법이 있습니다.

  • 파일 삭제 (참조 제거)
  • 프로젝트 빌드
  • 파일 다시 삽입
  • 프로젝트 빌드

풀 버전이므로 파일을 찾는 데 문제가 없습니다.

  • Xcode 프로젝트 탐색기에서 파일 찾기
  • 파일을 마우스 오른쪽 버튼으로 클릭하고 "파인더에 표시"를 누릅니다 (파일이있는 위치에서 파인더가 열립니다).
  • Xcode에서 파일을 선택하고 백 스페이스 키를 누른 다음 "참조 제거"를 클릭하십시오.
  • 프로젝트 빌드 (실패하지만 완료 될 때까지 기다림)
  • 파인더에서 방금 삭제 한 위치로 파일을 끌어서 다시 삽입하십시오.
  • 프로젝트 빌드 (지금 작동해야 함)

1

TWRAppDelegate.o 파일을 삭제하고 빌드를 계속할 수 있습니다. 오류 메시지에 언급 된 전체 경로를 복사하여 터미널의 'rm'명령 뒤에 붙여 넣습니다. 정리 / 재 구축, 파생 데이터 삭제, 프로젝트에서 파일 추가 / 제거 등을 할 필요가 없습니다.


-1

1 단계 : 프로젝트> 빌드 설정> 검색 경로로 이동합니다.

2 단계. "항상 사용자 경로 검색"을 예로 설정합니다.

3 단계. 프로젝트 빌드 (경고가 표시되지만 프로젝트가 빌드됩니다.)

4 단계. "항상 사용자 경로 검색"을 다시 아니요로 설정하고 다시 빌드하여 경고를 제거합니다.


이 답변을 찾는 다른 사람들을 위해 이것을 추가 할 수 있습니다. "항상 사용자 경로 검색"은 Xcode 8.3에서 더 이상 사용되지 않으며 문서에서 "사용하지 않는 것이 좋습니다."라고 표시되어 있습니다. (즉, NO로 설정)
Groot

-1

내 경우에는 깨끗한 재 구축이 아니므로 문제 해결 방법을 설명합니다
.-파일에 대한 참조 제거 (파일을 삭제하지 않음)
-파일을 프로젝트에 다시 추가하고 실행


반대 투표에는 설명이 필요합니다. 저에게 효과적이며 다른 사람에게도 효과가있을 수 있습니다
David Santiago
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.