[objective-c] Xcode 빌드 실패“아키텍처 x86_64에 대한 정의되지 않은 기호”

Xcode 초보자의 질문 :

Xcode 4.6.3에 대한 나의 첫 경험입니다.

페어링 된 BT 장치를 검색하여 NSLog에 인쇄하는 매우 간단한 콘솔 프로그램을 작성하려고합니다.

다음 오류로 빌드됩니다.

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_IOBluetoothDevice", referenced from:
      objc-class-ref in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

나는 미친 것처럼 검색했다. 일반적인 문제점은 헤더 파일 만 가져오고 링커에서 구현 (* .m-file)을 찾을 수없는 파일에 대한 참조 여야합니다. 그러나 IOBluetooth 라이브러리는 Foundation Framework와 같은 표준 프레임 워크입니다.

위의 진술에서 무엇을 놓치고 있습니까?

또한 32 비트 시스템을 위해 빌드를 시도했습니다 (빌드가 다시 실패 함). 그것은 분명히 링커 오류이지만 x86 및 x64 아키텍처 모두에서 IOBluetoothDevice 구현을 찾는 데 문제가 있다는 것을 제외하고는 링커 오류입니다. IOBluetooth?

귀하의 정보를 위해 내 주요 코드 “main.m”은 다음과 같습니다.

#import <Foundation/Foundation.h>
#import <IOBluetooth/objc/IOBluetoothDevice.h>          // Note the import for bluetooth
#import <IOBluetooth/objc/IOBluetoothDeviceInquiry.h>   // Note the import for bluetooth


int main(int argc, const char * argv[])
{
    @autoreleasepool {
        IOBluetoothDevice *currentDevice;
        NSArray *devices = [ IOBluetoothDevice pairedDevices];


        for (id currentDevice in devices){
          NSLog(@"%i : %@",[ currentDevice classOfDevice ], [ currentDevice name ]);
        }
    }
    return 0;
}

올바른 방향에 대한 도움이나 조언을 주셔서 감사합니다.



답변

프로젝트에 IOBluetooth.framework를 포함하여 누락 된 것 같습니다. 다음과 같이 추가 할 수 있습니다.

-왼쪽 창의 왼쪽 위에있는 프로젝트를 클릭하십시오 (파란색 아이콘).

가운데 창에서 Build Phases 탭을 클릭하십시오.

“바이너리와 바이너리 연결”아래에서 플러스 버튼을 클릭하십시오.

목록에서 IOBluetooth.framework를 찾아 추가를 누르십시오.

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

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

이렇게하면 링커가 IOBluetooth.framework 정의를 찾을 수 있습니다. 왼쪽 창에서 프레임 워크를 클릭하고 오른쪽 창에서 프레임 워크의 대상 멤버십을 확인하면 프레임 워크가 대상의 멤버임을 알 수 있습니다 (조직 목적으로 프레임 워크 그룹 아래에서 프레임 워크를 이동했습니다).

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


답변

UPD

Apple arm64 아키텍처 를 사용해야 합니다 . 프로젝트에서 x32 라이브러리를 사용하지 마십시오

따라서 아래 답변은 더 이상 정확하지 않습니다!


이전 답변

새로운 Xcode 5.1은 아키텍처 armv7, armv7s 및 arm64 를 기본값으로 설정합니다.

때로는 “빌드 실패”아키텍처 x86_64에 대한 정의되지 않은 기호 “” 오류 가 발생할 수 있습니다. Apple의 일부 라이브러리는 원래 x32 용으로 컴파일되었으며 x64를 지원하지 않기 때문입니다.

따라서 필요한 것은 다음과 같이 프로젝트 대상의 “아키텍처”를 변경하는 것입니다.

NB. Cocoapods를 사용하는 경우 “Pods”대상에 대해 동일한 작업을 수행해야합니다.

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


답변

아키텍처 x86_64에 대한 정의되지 않은 기호 : “_OBJC_CLASS _ $ _ xxx”, 참조 : yyy.o의 objc-class-ref

이것은 일반적으로 클래스 “yyy”에서 “xxx”(프레임 워크 또는 클래스 일 수 있음)를 호출하고 있음을 의미합니다. 컴파일러가 “xxx”를 찾을 수 없으므로이 오류가 발생합니다.

네비게이터 창에서 프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭 하고 “” YourProjectName “에 파일 추가 옵션 탭하여 누락 된 파일 (이 경우 “xxx”)을 추가해야합니다 .

팝업 창은 Finder에서 프로젝트 파일을 엽니 다. 여기서 누락 된 파일을보고 프로젝트에 추가하면됩니다. ” 필요한 경우 항목 복사 “상자 를 반드시 체크하십시오 . 행운을 빕니다!!


답변

파생 데이터가 손상되면 Xcode 7.2 에서이 오류를 보았습니다 (제 경우에는 빌드를 중단하고 근본 원인이라고 생각합니다).

따라서 다른 솔루션 (특히 Chris와 BraveS가 더 가능성이 있다고 생각되는 경우)이 문제에 맞지 않으면 파생 데이터 (선택 : Window / Projects / Derived Data-> Delete)를 삭제하고 다시 작성하십시오.

(다른 사람들이 참조 할 수 있도록 추가됨-원래 질문에 올바르게 답변되었음을 알고 있습니다)


답변

Xcode 9.0b5에서는 Xcode 9.0b5에 소스 코드를 추가 할 때 대상 설정을 준수하지 않는 버그가 있으므로이 문제가 발생할 수 있습니다. 들어가서 각 파일의 대상을 수동으로 설정해야합니다.

수동 대상 멤버십 일러스트가있는 Xcode 프로젝트


답변

제 경우에는 도서관이 아니고 일부 수업이었습니다.

x86_64 아키텍처에 대한 정의되지 않은 기호 :
“_OBJC_CLASS _ $ _ ClassNmae”, 참조 : SomeClassName의 objc-class-ref “.

d : 아키텍처 x86_64에 대한 심볼을 찾을 수 없음

clang : 오류 : 종료 코드 1에서 링커 명령이 실패했습니다 (호출을 보려면 -v 사용).

해결 방법
Xcode에는 여러 스키마 (Production, Dev 등)가있는 여러 대상이 있습니다. 새로 추가 된 구현 중 일부 (Class.m)가 누락되었습니다.

Xcode-> 대상-> 빌드 단계-> 컴파일 소스

그래서 수동으로 추가해야했습니다.

그런 다음 성공적으로 컴파일 및 빌드 할 수 있습니다.


답변

나는 또한 같은 문제가 발생, 위의 방법은 작동하지 않습니다. 실수로 다음 디렉토리의 파일을 삭제했습니다.
여기에 이미지 설명을 입력하십시오

또는

~ / 라이브러리 / 개발자 / Xcode / DerivedData /

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