2015-01-05 3 views
1

일부 iOS 코드에 64 비트 지원을 추가 할 때 x8632 아키텍처 (64 비트 iOS 시뮬레이터)에서는 nlist 기능을 사용할 수 없습니다. nlist()를 호출하는 코드는 다른 모든 아치 (armv7, armv7s, arm64 및 i386)에서 올바르게 작동하지만 링커가 링크 된 라이브러리에서 심볼을 찾지 못하는 x86_64에서는 성공적으로 빌드되지 않습니다.아키텍처 x86_64에 대한 정의되지 않은 기호 : "_nlist"

그것은 단순히 추가하여 엑스 코드로 만든 템플릿 프로젝트에 재현 할 수 있습니다에서 참조,
"_nlist"

#import <mach-o/nlist.h> 

int testnlist() 
{ 
    struct nlist nl[2]; 
    bzero(&nl, sizeof(struct nlist) * 2); 
    return nlist("test", nl); 
} 

결과에 : 아키텍처 x86_64에 대한

정의되지 않은 문자 : ViewController.o의 _testnlist
ld : 아키텍처 x86_64에 대한 심볼이 없습니다.

iOS SDK가 설치된 Xcode 6.1.1 : 8.1, iPhone 6 시뮬레이터 용으로 테스트되었습니다. 애플은 x86_64에 대한 내장 된 시뮬레이터의 공유 라이브러리의 일부를 포함하도록 잊어 버린 수도 있지만 나는 또한 바보 뭔가를 분명 내려다 수 있습니다처럼

는`당신이 시도가, 호기심의 아웃

+0

... 나에게 보이는 nlist_64'? –

+0

아니, 나는 (나는 그 존재를 정말로 알지 못했다) 그러나 나는 확실히 그것을 시도 할 것이다. –

+0

아, 알겠습니다. 'nlist_64'는 64 비트를위한 심볼 테이블 엔트리 구조이지만 nlist() 함수는 여전히 사라져 있습니다. –

답변

0
you might want to try: 

#ifndef N_NLIST_DECLARED 
struct nlist 
{ 
    union 
    { 
     char *n_name; 
     struct nlist *n_next; 
     long n_strx; 
    } n_un; 
    unsigned char n_type; 
    char n_other; 
    short n_desc; 
    unsigned long n_value; 
}; 
#endif 

which I extracted from: 
<https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/android-4.1.2_r2/lib/gcc/x86_64-linux/4.6.x-google/include-fixed/linux/a.out.h> 

in that same header file, you will find lots of other things that 
will be 'gotcha's when moving to 64bit code 
+0

이것은 도움이되지 않습니다. nlist() 함수가 구현되지 않았습니다. 동일한 이름의 struct가 없습니다. –

관련 문제