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 Block
에 NO
내 빌드 설정과 오류가 사라졌다.
다른 링커 플래그에서 -ObjC를 제거하거나 실수로 .h 대신 .m 파일을 가져 왔는지 확인하십시오.
복제본을 찾는 가장 빠른 방법은 다음과 같습니다.
- 대상으로 이동
- 빌드 단계로 이동
- 컴파일 소스로 이동
- 중복 파일을 삭제하십시오.
다음 단계에 따라 문제가 해결되었습니다.
- 대상 설정에서 빌드 단계로 이동하십시오.
- “바이너리와 바이너리 연결”로 이동하십시오.
- 라이브러리가 두 번 존재하는지 확인하십시오.
- 다시 빌드하십시오.
둘 이상의 클래스에서 @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:
Declare it as static, to limit the scope to class:
static BOOL myVar = NO;
Remove the initialization (which will make the two classes share the global var):
BOOL myVar; -(void) init{ myVar = NO; }
Declare it as a property:
@property BOOL myVar;
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
'IT story' 카테고리의 다른 글
RegEx : 따옴표 사이의 값 잡기 (0) | 2020.05.10 |
---|---|
VIM에서 커서 뒤 또는 주변의 단어 삭제 (0) | 2020.05.10 |
TestFlight는 어떻게합니까? (0) | 2020.05.10 |
Google +1이 마우스 움직임을 기록하는 이유는 무엇입니까? (0) | 2020.05.10 |
낮은 대역폭, 높은 대기 시간 환경을 어떻게 시뮬레이션합니까? (0) | 2020.05.10 |