2014-07-27 3 views
1

ld-linux.so의 맨 페이지는 심볼 해석을 의미하지만이 개념을 설명하지는 않습니다.기호를 해결한다는 것은 무엇을 의미합니까?

http://man7.org/linux/man-pages/man8/ld.so.8.html

나는 문제의 문구는 LD와 리눅스의 외부에서 사용 생각합니다.

기호를 해결한다는 것은 무엇을 의미합니까? 나는이 문구를 많이 보았지만 결코 정의를 보지 못했습니다.

이 질문을하게 된 원인은 변수의 심볼을 해석하여 변수의 생성을 보장하거나 심볼을 해석하면 변수가 있음을 알 수 있습니다. 문제는이 일에 관련이있다 :

Force Eager Initialization of Static Variables in Dynamically Linked Libs

+0

@Mat 질문에 좀 더 구체적으로 초점을 맞추고 싶습니다. "심볼 해결 보장 구축을 수행합니까?" 이 사람은 올바르게 dup로 표시되었으므로이 질문을 편집하거나 새 질문을 열어야합니까? – Praxeolitic

+1

기호의 해상도가 "건설을 보장"하지 않는다면, 적절한 수준에 있지 않은 것입니다. 동적 또는 정적 링크의 심볼 해석은 사물 (함수/데이터)을 실제 주소로 매핑하기 때문에 프로그램을 실행할 수 있습니다. 당신의 언어는 건설을 보장 할 것인가, 그렇지 않으면 링커가 아닌지 보장 할 것입니다. – Mat

답변

0

그것은의 위치 (코드 조각이 공유 라이브러리에서 함수를 호출 예를 들어 점)에 "정의되지 않은"기호의 사용과 일치하는 것을 의미합니다 실제 기호 (예 : 공유 라이브러리 파일의 실제 함수 코드), 필요에 따라 라이브러리로드.

이 용어는 컴파일 타임에 정적 라이브러리 및 런타임에 동적 라이브러리와 연결하는 데 사용됩니다.

C++에서 공유 라이브러리의 변수에 대한 심볼을 분석하면 라이브러리가로드되지 않은 경우 해당 라이브러리의 모든 것을 구성해야합니다.

0

큰 프로그램은 별도로 컴파일 된 모듈로 구성됩니다. 당신은 하나의 데이터베이스에 물건을 넣고, 다른 모듈에 인쇄하고, 다른 모듈에 사용자 인터페이스를 넣을 수도 있습니다. 첫 번째 단계는 각 모듈을 소위 객체 파일로 컴파일합니다. 일종의 중간 단계.

마지막 단계는 이러한 모든 개체를 함께 연결하는 것이며 링커가 한 개체의 기호가 다른 개체의 기호 또는 값을 다른 개체의 값이나 함수에 액세스하려고 시도하는 것으로 결론 내릴 수 있습니다. 있다. 이 경우 링커는 참조를 '해결할'수 없습니다.

해결의 실제 '조치'는 링커가 하나의 모듈에 넣어야하는 주소를 계산하여 다른 모듈에서 올바르게 액세스 할 수 있도록합니다.

일반적으로 C, C++ 등의 컴파일 된 언어와 링크 할 때 나타나는 문제입니다. 모든 모듈이 객체로 변환 된 후 마지막 인스턴스에 나타납니다.

0

예를 들어 헤더에서 선언되었지만 구현되지 않은 함수 (컴파일러에서 함수를 알 수없는 함수)는 libs에서 처리됩니다. 그게 무슨 뜻인지는 "상징 해결"을 의미합니다. "기호"는 lib에 의해 내보내지는 함수에 주어진 이름입니다. 링커는 함수의 구현이 코드 또는 가져온 lib에서 찾을 수 없을 때마다 "심볼을 분석하지 못합니다".

관련 문제