IT story

Xcode에서 x86_64 아키텍처에 대한 중복 기호

hot-time 2020. 5. 10. 10:24
반응형

Xcode에서 x86_64 아키텍처에 대한 중복 기호


나는 위의 제목과 동일한 질문을 받았지만 아직 정답을 찾지 못했습니다. 오류가 발생했습니다.

    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

도움을 주시면 감사하겠습니다.

마지막  으로이 오류의 원인을에 추가 -ObjC했습니다 Other Linker Flags. 이 값을 제거한 후 프로젝트를 성공적으로 빌드 할 수 있지만 이유를 모르겠습니다. 누구든지 이것을 설명 할 수 있습니까?


x86_64 아키텍처를위한 75 개의 중복 심볼

동일한 기능을 두 번로드했음을 의미합니다. 이 문제로 제거한 후 사라 -ObjC에서 Other Linker Flags,기능을로드하는이 두 번 즉,이 옵션의 결과를 :

기술 Q & A에서

이 플래그는 링커가 라이브러리에서 Objective-C 클래스 또는 카테고리를 정의하는 모든 오브젝트 파일을로드하게합니다. 이 옵션은 일반적으로 응용 프로그램에로드 된 추가 객체 코드로 인해 더 큰 실행 파일을 생성하지만 기존 클래스의 범주를 포함하는 효과적인 Objective-C 정적 라이브러리를 성공적으로 만들 수 있습니다.

https://developer.apple.com/library/content/qa/qa1490/_index.html


나를 위해 'No Common Blocks'를 Yes에서 No로 변경하면 (대상-> 빌드 설정-> Apple LLVM-코드 생성에서) 문제가 해결되었습니다.


어리석은 일이지만 실수 #import.m파일을 편집 하지 않았는지 확인하십시오.


필자의 경우 다음과 같이 상수 문자열을 정의하기 위해 헤더 파일을 만들었습니다.

NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

나는 다음을 사용 하여이 시나리오를 해결했다 static.

static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

나는 같은 문제가 있습니다. 프로젝트 대상> 빌드 설정> 공통 블록 없음 경로의 Xcode 7.2에서 NO로 변경합니다.


승인 된 답변이 문제에 관한 것으로 나타 났지만 문제를 해결하는 데 도움이되지 않았습니다.이 답변이 매우 실망스러운 문제에 도움이되기를 바랍니다.

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"같은 함수를 두 번로드했음을 의미합니다. 다른 링커 플래그에서 -ObjC를 제거한 후 문제가 사라 지므로이 옵션으로 인해 함수가 두 번로드됩니다."

평신도의 관점에서 이것은 프로젝트에 정확히 같은 이름을 가진 두 개의 파일이 있음을 의미합니다. 어쩌면 한 프로젝트를 다른 프로젝트로 결합하고 있습니까? "중복 심볼"오류 위의 오류를 살펴보고 어떤 폴더가 복제되는지 확인하십시오. 제 경우에는 BLoginViewController였습니다.

예를 들어 아래 이미지에서 두 개의 BImageViewController가 있음을 알 수 있습니다.이 문제의 원인입니다.

하나를 삭제하자마자 문제가 사라졌습니다. :)

여기에 이미지 설명을 입력하십시오


다른 클래스에서 동일한 이름을 가진 const 변수를 선언 할 때도 발생합니다.

Message.m 파일에서

const int kMessageLength = 36;

@implementation Message

@end

파일 Chat.m에서

const int kMessageLength = 20;

@implementation Chat

@end

이것은 Objective-C에서 2 년 전에 개발 한 프로젝트에서 "권장 설정"팝업을 수락했을 때 발생했습니다.

문제는 "권장 설정"업데이트를 수락하면 Xcode가을 (를) 포함한 일부 빌드 설정을 자동으로 변경하거나 추가했다는 것 GCC_NO_COMMON_BLOCKS = YES;입니다.

이로 인해 duplicate symbol업데이트 된 프로젝트에서 오류가 발생 하여 빌드가 실패했습니다 . 내가 변경 그래서 No Common BlockNO내 빌드 설정과 오류가 사라졌다.


다른 링커 플래그에서 -ObjC를 제거하거나 실수로 .h 대신 .m 파일을 가져 왔는지 확인하십시오.


복제본을 찾는 가장 빠른 방법은 다음과 같습니다.

  1. 대상으로 이동
  2. 빌드 단계로 이동
  3. 컴파일 소스로 이동
  4. 중복 파일을 삭제하십시오.

다음 단계에 따라 문제가 해결되었습니다.

  1. 대상 설정에서 빌드 단계로 이동하십시오.
  2. “바이너리와 바이너리 연결”로 이동하십시오.
  3. 라이브러리가 두 번 존재하는지 확인하십시오.
  4. 다시 빌드하십시오.

둘 이상의 클래스에서 @implementation에서 동일한 변수를 정의하면이 문제가 발생할 수 있습니다.


제 경우에는 위치에 같은 이름의 파일이 두 개있었습니다

대상> 빌드 단계> 소스 컴파일 및 중복 파일을 삭제하십시오.


Xcode 7.3에서 일부 레거시 프로젝트가 열린 상황은 다음과 같습니다.

duplicate symbol _SomeEnumState in:

두 개의 관련이없는 파일들의 목록이 뒤 따랐다.

ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

나를 위해 그것을 해결 한 것은 열거 형 선언을 다음과 같이 바꾸는 것입니다.

enum SomeEnumState {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
} SomeEnumState;

이에:

typedef NS_ENUM(NSUInteger, SomeEnumState) {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
};

누군가 이것에 대한 설명을 가지고 있다면, 저를 계몽하십시오.


  • 대상으로 이동
  • 빌드 설정을 선택하십시오
  • "No Common Blocks"를 검색 하고 NO로 선택하십시오 .

그것은 나를 위해 일했다


Xcode8 권장 프로젝트 설정 중에 나를 위해 "No Common Blocks"를 YES로 업데이트하면이 문제가 발생합니다.


실수로 .m 파일을 가져 오지 않았는지 확인하십시오. 프로젝트 창에서 파생 된 데이터를 삭제 한 다음 빌드하고 다시 실행할 수 있습니다.


최근에 오류의 원인을 찾는 두통이있었습니다. 다른 클래스에서 다음 코드 스 니펫을 사용했기 때문에 내 앱이 컴파일하고 싶지 않다는 것을 알았을 때 궁금했습니다.

dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
    NSTimeInterval interval;
    double second, subsecond;
    struct timespec time;
    dispatch_time_t milestone;


    interval = [date timeIntervalSince1970];
    subsecond = modf(interval, &second);
    time.tv_sec = second;
    time.tv_nsec = subsecond * NSEC_PER_SEC;
    milestone = dispatch_walltime(&time, 0);

    return milestone;
}

누군가를 도울 수 있기를 바랍니다.


포드 리포지토리를 추가 할 때 동일한 오류가 발생했습니다.

pod 'SWRevealViewController'

gitHub에서 이미 추가 된 소스 코드 (SWRevealViewController) 따라서 소스 코드 또는 포드 리포지토리를 제거하면 오류가 수정됩니다.

사례 # 2 :

두 번째 로이 오류는 .h 파일 에서 상수를 선언 할 때 나타납니다 .

NSString * const SomeConstant  = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...

이 문제가있는 다른 사람에게는이 답변 중 어느 것도 내 해결책을 보지 못했습니다.

.pbxproj 병합 충돌이 발생하여 수동으로 해결되었지만 (빈약하지는 않지만) .pbxproj의 개별 클래스 파일에 대한 중복 참조가있었습니다. 프로젝트> 빌드 단계> 컴파일 소스에서 삭제하면 모든 것이 해결되었습니다.

이것이 누군가를 도울 수 있기를 바랍니다.


오늘 같은 오류가 발생했습니다. 오류의 핵심 단어는 duplicate입니다. 나는 그것을 수정합니다 :

1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :

참조 제거

3. Add the file to your project again
4. Add the file's .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear

Similar to Juice007, I had declared and initialized a C type variable in two different .m files (that weren't imported!)

BOOL myVar = NO;

however, this method of declaring and initializing a variable, even in .m, even in @implementation grants it global scope. Your options are:

  1. Declare it as static, to limit the scope to class:

    static BOOL myVar = NO;
    
  2. Remove the initialization (which will make the two classes share the global var):

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
    
  3. Declare it as a property:

    @property BOOL myVar;
    
  4. Declare it as a proper iVar in the @interface

    @interface myClass(){
        BOOL myVar;
    }
    @end
    

In my case I had two main() methods defined in my project and removing one solved the issue.


Same issue happen with me, when I was integrating the lob project inside my project.

여기에 이미지 설명을 입력하십시오

Actually lob project also have the AFNetworking files, So I remove the .m files from lob project.

여기에 이미지 설명을 입력하십시오

Actually .m files are conflicting with My project POd/AFNetworking/ .m files

여기에 이미지 설명을 입력하십시오


In Xcode 6.3.2. I have checked all possibility like as belowed

1: I have not import .m file in my project.

2: Removed -ObjC from Other linker flag.

3: Removed all my derive Data.

still i am getting same error. I have removed this error by removing any variable declaration from .pch file. in my case, i have declared AppDelegate object in .pch file. finally i found reason that cause error. so i remove declaration of any variable from .pch file and my project working charm.


Another silly mistake that will cause this error is repeated files. I accidentally copied some files twice. First I went to Targets -> Build Phases -> Compile sources. There I noticed some files on that list twice and their locations.


I hope it will definitely help you

I got same error 3 duplicate symbols for architecture x86_64

in my case I have copied code from another file of same project eg. code of A.m file to B.m and after complilation i got an error as mention. and i have solve error by changing the name of global Variable.

this error came in my case because of same declare for global variable in both file.


I also have this fault today.That's because I defined a const value in a .m file.But I defined another .m file that also included this const value.That's means it has two same const values.So this error appears. And my solution is adding a keyword "static" before the const value.such as:

static CGFloat const btnConunt = 9;

And then I build the project it won't report this error.


1. Build Phases (빌드 단계)로 이동합니다. 2. 파일 이름을 찾습니다. 3. Delete duplicate (복제본 삭제)-> Error (오류)가 사라집니다.

그렇지 않으면 "file.m"을 검색하십시오. #import "file.m"이 표시되면이 행을 지우십시오.


내가 한 것과 같은 오류가 발생합니다.

1. 라인 바로 위에 표시된 끝에서 복제 심볼 파일 (클래스 이름 또는 프레임 워크 이름)을 복사합니다 (x86_64 아키텍처의 중복 심볼).

2. 찾기 네비게이터에 붙여 넣고 Enter 키를 누릅니다

중복 수업을 보여주었습니다. 중복 클래스를 제거하고 성공적으로 실행합니다.

참고 URL : https://stackoverflow.com/questions/24298144/duplicate-symbols-for-architecture-x86-64-under-xcode

반응형