2010-07-12 3 views
0

나는 성공적으로 실행되는 osx 실행 파일을 가지고있다. 응용 프로그램이 성공적으로 실행되기 때문에 분명히 OS는 응용 프로그램을로드 할 때 성공적으로 이러한 기호를 해결할 수있는,

 U _accept$UNIX2003 
    U _bind$UNIX2003 
    U _closedir$UNIX2003 
    U _connect$UNIX2003 
    U _fwrite$UNIX2003 
    U _getpeername$UNIX2003 
    U _getsockname$UNIX2003 
    U _listen$UNIX2003 
    U _mmap$UNIX2003 
    U _mprotect$UNIX2003 
    U _munmap$UNIX2003 
    U _nanosleep$UNIX2003 
    U _opendir$UNIX2003 
    U _pthread_cond_timedwait$UNIX2003 
    U _pthread_cond_wait$UNIX2003 
    U _pthread_join$UNIX2003 
    U _recv$UNIX2003 
    U _recvfrom$UNIX2003 
    U _recvmsg$UNIX2003 
    U _semctl$UNIX2003 
    U _send$UNIX2003 
    U _sendmsg$UNIX2003 
    U _sendto$UNIX2003 
    U _setenv$UNIX2003 
    U _strftime$UNIX2003 
    U _unsetenv$UNIX2003 

: 나는 그것에

nm mono | grep UNIX 

를 실행하면, 나는이 결과를 얻을 수 있습니다. 이 기호를 정의하는 시스템 라이브러리를 파악하려고합니다. 이

nm /usr/lib/libSystem.B.dylib | grep UNIX 

$는 Unix2003 접미사가에는 문자 수 없습니다 판명를 실행할 때

한 가능성이 용의자는, 그러나, /usr/lib/libSystem.B.dylib입니다.

이 기호가 정의 된 위치를 확인하고 싶습니다. 실행되지 않는 별도의 프로그램에서 빌드 문제와 관련하여 _opendir $ UNIX2003을 찾을 수 없기 때문에 런타임에 실패합니다.

답변

4

이 사과 문서의 명확한 토론 Symbol Variants Release Notes을 참조하십시오.

이들은 모두 /usr/lib/libSystem.B.dylib에 정의되어 있습니다. 범용 문자는 dylib이며 32 비트와 64 비트 버전을 모두 포함합니다. 상자에는 다음과 같은 문자가 표시됩니다.

/usr/lib$ nm -arch i386 libSystem.dylib | grep fputs 
000c22c0 T _fputs 
000328bc T _fputs$UNIX2003 
/usr/lib$ nm -arch x86_64 libSystem.dylib | grep fputs 
00000000000551cf T _fputs 

요점은 64 비트 변형에서 SUS 호환 버전이 아닌 것입니다. 따라서 $UNIX2003 변종은 없습니다. 귀하의 링크 문제는 귀하의 라이브러리가 지원하는 아키텍처 때문이라고 생각합니다.

+0

위대한 답변, 감사합니다! 나는 지금 당장 일해온 문제를 완전히 해결합니다. –

관련 문제