Xcode 프로젝트를 실행하려고하면 중복 된 기호가 있다는 오류와 함께 실패합니다. 나는 온라인에서 이러한 중복을 찾았지만 운이 없었습니다.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
Xcode 프로젝트를 실행하려고하면 중복 된 기호가 있다는 오류와 함께 실패합니다. 나는 온라인에서 이러한 중복을 찾았지만 운이 없었습니다.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
답변:
저에게는 "공용 블록 없음"컴파일러 설정을 NO로 전환하는 데 도움이되었습니다.이 설정은 여기에 설명되어 있습니다. GCC_NO_COMMON_BLOCKS는 무엇에 사용됩니까?
Xcode 8을 사용하여 "권장 설정으로 프로젝트 업데이트"옵션이 내 프로젝트에 대해 '공통 블록 없음'을 켭니다.
다시 끄면 모든 것이 해결되었습니다.
나를 위해 실수로 파일을 .h가 아닌 .m으로 가져온 것입니다.
포드를 다운 그레이드하는 동안 포드를 엉망으로 만들었 으며 포드를 제거하고 다시 설치하여 arm64 아키텍처의 중복 기호 문제를 해결했습니다 .
pod deintegrate
pod install
또 다른 해결책은 다음과 같습니다.
선택 프로젝트 -> 대상 -> 빌드 단계 -> 컴파일 소스 -> 귀하의 경우에는 (3 마지막 오류 라인에 언급 된 파일을 검색 BFAppLinkReturnToRefererView.o ).
그러면 검색 결과에 1 개 또는 2 개의 파일이 표시됩니다.
그중 하나를 제거 하고 다시 컴파일하십시오. . 파일이 하나만 남아 있고 빌드 충돌이 더 이상 없기 때문에 지금 다시 컴파일해야합니다.
그래도 작동하지 않으면 파일에 오류가있을 수 있으므로 모두 제거하고 다시 컴파일해야합니다. 다시 작동합니다.
이 오류는 링커가 obj 파일을 링크하려고 할 때 발생합니다. 이 오류에 대해 생각할 수있는 몇 가지 이유는 다음과 같습니다.
복제 된 함수 / 클래스는 프로젝트의 서로 다른 두 위치 / 파일에 정의되어 있으며 그중 하나만 빌드 명령의 변형에 대해 컴파일해야했습니다. 그러나 어떻게 든 두 파일 모두 프로젝트에서 컴파일되었습니다. 따라서 컴파일해야하는 파일 목록에 src 파일을 추가하는 if-else 조건 또는 기타 종속성을 확인하고 특정 빌드 명령에 대해 불필요한 파일을 제거해야합니다.
복제 된 함수 / 클래스가 프로젝트의 서로 다른 두 위치 / 파일에서 실수로 정의되었습니다. 잘못된 정의를 제거하십시오.
다시 빌드하기 전에 OBJ 디렉토리를 정리하십시오.이 충돌을 일으킬 수있는 이전 빌드의 오래된 obj 파일이있을 수 있습니다.
추신 나는 전문가가 아니지만 이것이 내가 직면했을 때이 문제를 해결 한 방법입니다. :)
Xcode 7 또는 8로 이동하고 정말 오래된 프로젝트를 여는 경우이 문제가 발생했습니다.
에 SomeConstFile.h
NSString * const kAConstant;
에 SomeConstFile.m
NSString *const kAConstant = @"a constant";
이전 버전의 컴파일러는 헤더 파일의 정의가 extern이라고 가정 했으므로 SomeConstFile.h를 여기 저기에 포함하는 것이 좋습니다.
이제 이러한 const를 extern으로 명시 적으로 선언해야합니다.
에 SomeConstFile.h
extern NSString * const kAConstant;
제 경우에는 이유가 너무 어리 석었습니다.
매크로가 정의 된 Constant.h 파일이 있습니다. 나는 거기에서 NSString을 할 생각을했다. 그리고 이렇게 :
NSString const *kGreenColor = @"#00C34E";
이로 인해 아키텍처 arm64 및 링커 명령에 대한 중복 기호 문제가 발생했습니다. 종료 코드 1로 실패했습니다. const NSString 줄을 제거하면 저에게 효과적 이었습니다.
포함 파일을 확인하십시오. 실수로 "filename.h"대신 "filename.m"을 가져 왔기 때문에이 문제가 발생했습니다. 자동 수정 (탭)은 "h"가 아닌 "m"을 입력했습니다.
오류에서 모든 클래스가 여러 번 나타나는 것으로 나타났습니다. 작동 할 클래스를 찾아 제거했습니다.
AppDelegate.h 및 .m 파일을 여러 번 생성하고 있습니다. 그래서이 오류가 발생합니다. 마지막으로 저에게 잘 작동하는 클래스를 찾아 제거했습니다.
이 문제를 해결하려면 빌드 단계로 이동하여 (facebookSDK, unityads)와 같은 중복 파일을 검색하고 (확장자 file.o)를 삭제 한 다음 다시 빌드하십시오.
나를 위해 sampleMethod
ViewController_A에서 호출되는 메서드를 만들고 ViewController_B에서도 동일한 메서드를 만들었습니다.이 오류가 발생하여 ViewController_B의 메서드 이름을 secondSampleMethod
. 오류를 수정했습니다.
코드를 줄이고 여러 곳에서 동일한 코드를 복제하지 않는 좋은 기능처럼 보입니다.
No Common 블록을 Yes에서 No로 변경 한 다음 테스트 가능성을 Yes에서 No로 설정하려고했습니다. 작동하지 않았습니다. 빌드 단계에서도 중복 파일을 확인했지만 중복 파일이 없습니다.
Plz 설정을 변경합니다.
1 단계 : TARGETS-> Build Settings-> No Common Blocks-> No로 이동합니다.
2 단계 : TARGETS-> Build Settings-> enable testability-> No로 이동합니다.