Programing

중복 기호 문제

lottogame 2020. 11. 29. 09:30
반응형

중복 기호 문제


iOS 프로젝트를 리팩터링하는 동안이 버그를 만났습니다. 연결 단계에서 다음 메시지가 표시됩니다.

ld : /path/to/TinCanViewController-E98A666B7AF2673A.o 및 /path/to/TinCanViewController-E98A666B7AF2673A.o의 중복 기호 _OBJC_IVAR _ $ _ TinCanViewController.currentViewController

내가 알 수 TinCanViewController-E98A666B7AF2673A.o있는 한, 지정된 기호를 두 번 선언 한다고 주장하는 것처럼 보입니다 . 두 경로 모두 정확히 동일한 .o 파일을 가리 킵니다. nm특정 파일에서 실행했는데 해당 기호가 한 번만 포함되었습니다.

00008150 S _OBJC_IVAR _ $ _ TinCanViewController.currentViewController

나는 nm디렉토리의 다른 모든 .o 파일을 실행하여 어떻게 든이 기호를 선언했는지 확인했지만 그렇지 않았습니다. 이것은 내가 TinCanViewController 클래스에 추가하는 모든 멤버에게 발생합니다. currentViewController에만 국한되지 않습니다.

나는 어떤 식 으로든 클래스에 대해 어떻게 든 두 번 연결해야 할 것 같지만이 클래스에 대한 모든 참조를 꽤 열심히 살펴보고 확인했습니다. 리팩토링 된 버전에는 기본적으로 아무것도 없습니다. AppDelegate에 포함되어 있지만 지금은 기본적으로 시작시 다른 ViewController를로드하는 패스 스루 클래스입니다. 프로젝트의 다른 클래스에는 포함되지 않습니다.

이 문제의 원인이 무엇인지 또는 어떻게 더 잘 디버깅 할 수 있는지에 대한 제안이 있습니까?


최신 Xcode 4에서이 문제가 발생했습니다. 원인 : file.m대신 포함 했습니다.file.h

포함되었을 수 있습니다 TinCanViewController.m(이어야 함 TinCanViewController.h).


이 일이 발생했지만 내 문제는 리포지토리의 병합 문제와 관련이 있습니다. .m 파일이 한 번만 나열되어야하는 지점에 두 번 나열되었습니다 (프로젝트 내에서, 파일 / 그룹 구조 내에는 포함되지 않았으므로 Xcode에서 문제를 볼 수없고 오류 만 표시됨). 수정 사항은 프로젝트 파일 내에서 .pbxproj 파일을 열고 해당 파일에서 중복 항목을 찾는 것입니다. 복제물을 삭제하면 프로젝트가 잘 구축되었습니다.


프로젝트에 .h 파일과 .m 파일을 두 번 포함 시켰습니다. 두 번째 사본을 제거하면 오류가 사라졌습니다.


delegate.m이 컴파일 소스 내에서 한 번만 나열되는지 확인하십시오.


이 문제는 Class 폴더에서 모든 파일 .m 및 .h를 삭제 (Xcode 사용) 한 다음 프로젝트 (Command + Shift + K)를 정리하고 다시 빌드하면 여기서 해결됩니다. 그래서 Finder에서 Xcode의 클래스 폴더로 파일을 다시 드래그합니다. 마지막으로 프로젝트를 다시 정리하고 빌드했습니다.

행운을 빕니다 !!!


범용 정적 라이브러리를 만들 때 Apple의 최신 링커의 버그라고 생각합니다. 현재 버그 번호를 찾을 수 없습니다. 그러나 이것은 명확하게 설명하지 않고 armv6 및 armv7을 잘못 생성하기 때문에 발생합니다.

이 경우인지 확인하려면 armv6 또는 amv7 만 빌드하도록 구성을 변경하면이 문제가 발생하지 않습니다.


당신은 멀티 타겟 프로젝트가 두 개의 목표 같은 동일한 파일이있는 경우에도 발생할 수 abc.m하고는 abc.m모두 대상에 대해 선택됩니다.

무엇 내 경우에 일어난 나는라는 두 목표를 가지고 있었다 ABC그리고 XYZ모두가 자신의 가지고 DiagramViewController.m자신의 목표에 대한 코드를 실행 해야하는 파일을. 실수로 한 DiagramViewController.m대상으로 ABC선택했다 목표 XYZ도.

해결책 :

.m파일을 클릭 하여 파일 검사기로 이동하고 추가 대상을 선택 취소합니다.

여기에 이미지 설명 입력


나는 같은 문제가 있었다. 문제는 동일한 .m 파일을 포함하는 두 개의 라이브러리가 있다는 것입니다.

이렇게

lib.a - for device.

libCauly-universal.a - for simulator and device.

그래서 하나를 삭제했습니다.

참고 URL : https://stackoverflow.com/questions/3231948/duplicate-symbol-issues

반응형