2010-02-08 2 views
0

이것은 반복적으로 발생하는 질문입니다. 일반적으로 플러그 인에 관한 내용이지만 최근에는 일부 시스템 문제를 해결하기 위해 노력했습니다. 내 우려는 기본적으로 * nix 기반 시스템을 대상으로하지만 Windows에도 적용된다고 생각합니다.(동적) 링크를 수행하는 데 필요한 최소 정보량?

동적 연결을 수행하는 데 필요한 최소한의 정보량은 얼마입니까? 데비안 같은 리눅스 배포판에는 'i686'만 있으면 충분합니다. 그러나 여기에 암시 적 정보가 있다고 가정하고, -march=i686을 사용하여 컴파일되는 한 공유 객체를 동적으로 링크 할 수 없을 것입니다.

그래서 공유 객체를 성공적으로로드하려면 무엇이 정확하게 일치해야합니까? 나는 C++에서 컴파일러 (그리고 때로는 버전)조차도 이름 맹 글링으로 인해 일치해야한다는 것을 알고 있지만, 나는 이것이 c의 경우가 아니길 바랬다.

모든 의견을 감사드립니다.

편집가 :
닐의 대답은 나를 정말 동적 링크에 대해 이야기, 또는 오히려 아니에요 깨닫게했다, 질문은 두 가지입니다 정적 연결을 위해 무엇이 필요

  1. 동적 연결을 위해 필요한 것

나는 첫 번째 추측에 대해 더 높은 희망을 가지고 있습니다.

답변

2

코드는 최소한 동일한 프로세서 제품군에 대해 컴파일되어야하며 라이브러리 및 함수의 이름을 알아야합니다. 그 위에, 당신은 같은 ABI가 필요합니다. 사람들이 생각하는 것에도 불구하고 C 표준은 ABI를 지정하지 않으며 두 개의 C 컴파일러 (또는 동일한 컴파일러 버전)가 표준을 준수하고 동일한 플랫폼에서 실행되지만 다른 ABI.

정확하게 아키텍처 세부 정보를 지정하는 경우 - 필자는 결코 해 본 적이 없다는 것을 인정해야합니다. 서로 다른 리눅스 버전에서 바이너리 라이브러리를 배포 할 계획입니까?

+0

현재 고려중인 것은 모든 시간을 컴파일하는 대신 빌드 결과를 공유 할 수있는 빌드 시스템입니다. 여기에 우리가 가지고있는 속성의 조합마다 하나의 라이브러리를 컴파일해야합니다. 여기서 i686 linux, sparc solaris 및 독점적 인 ppc 기반 플랫폼과 마찬가지로 각 개발자는 자신의 작업을이 사전 빌드 된 라이브러리에 간단하게 연결할 수 있습니다. – falstro

+0

나는 두문자어를 싫어하므로 다른 사람들을 명확히하기 위해 여기에 추가하려고합니다. ABI는 Application Binary Interface입니다. 참조 : http://en.wikipedia.org/wiki/Application_binary_interface –

관련 문제