2017-03-07 2 views
2

최근에 Mach-O 파일에 대한 지식을 배우고 있습니다. 게으른 기호 & 비 게으름 기호를 배울 때 질문이옵니다. 누가 게으르거나 게으른 기호를 결정합니까? 그리고 왜? 나는 그것이 컴파일러 수 있습니다 생각심볼을 게으르거나 게으른 심볼로 만드는 것은 무엇입니까?

그렇게 ... UPDATE

: 내 질문에 대해는 A 해답을 발견, 어쩌면 진실 :

게으른가 -z 옵션에 의해 제어 바인딩은 링커에게 ld. 이 옵션은 키워드를 인수로 사용합니다. 키워드는 (다른 사람들)을 포함한다 :

lazy 실행 파일 또는 공유 라이브러리를 생성하는 기능 (바인딩 게으른)를 호출 할 때 포인트 함수 호출 해상도를 연기 할 동적 링커에게 그것을 표시하는 대신 로드시.

now 실행 파일 또는 공유 라이브러리를 생성 할 때, 프로그램이 시작될 때, 또는 공유 라이브러리가 dlopen()를 사용하는 대신에 함수 호출 해상도를 연기에 링크 될 때 모든 심볼을 해결하기 위해 동적 링커에게 그것을 표시 함수가 처음 호출 될 시점.

기본값은 지연 바인딩입니다. qcc (우리가 권장하는대로)을 사용하는 경우, -W 옵션을 사용하여 -z 옵션을 ld에 전달하십시오. 예를 들어 -Wl, -zlazy 또는 -Wl, -znow을 지정하십시오.

참조 : Optimizing the runtime linker

관련 질문 : Does Clang/GCC really support a delay loading feature?

답변

2

당신이 이해 무엇 있어 처럼요. 부분으로

: 가능한 늦게 일을하는

이 (가) 시작하는 데 발생하는 일을 줄이고, 그 실행 경로가 취해지지 않을 경우 (b)는 모두 그 일을 방지 할 수 있습니다. 링커뿐만 아니라 필요할 때까지 연기 할 수있는 모든 실행이 사실입니다.

관련 문제