Windows에서 *.a
과 *.dll
의 차이점은 무엇입니까? 내가 이해하는 것으로부터 모든 * .o 파일을 *.a
으로 패키징 할 수 있습니다. 이것은 리눅스에서 다른 응용 프로그램이 사용할 수있는 배포 가능 파일입니다.Windows에서 * .a와 * .dll의 차이점
*.a
과 *.dll
의 차이점은 무엇입니까? 그들은 상호 교환이 가능합니까? 신청서에 *.a
링크가 필요한 경우이를 *.dll
에 연결할 수 있습니까?
Windows에서 *.a
과 *.dll
의 차이점은 무엇입니까? 내가 이해하는 것으로부터 모든 * .o 파일을 *.a
으로 패키징 할 수 있습니다. 이것은 리눅스에서 다른 응용 프로그램이 사용할 수있는 배포 가능 파일입니다.Windows에서 * .a와 * .dll의 차이점
*.a
과 *.dll
의 차이점은 무엇입니까? 그들은 상호 교환이 가능합니까? 신청서에 *.a
링크가 필요한 경우이를 *.dll
에 연결할 수 있습니까?
제외 : Linux 기반 도구 체인을 사용하지 않는 한 일반 Windows 개발 도구에는 정의 된 * .a 형식이 없습니다. 아마도 Windows의 정적 라이브러리, 일명 .lib을 언급했을 것입니다.
DLL은 Unix의 공유 라이브러리 (* .so)와 동일하며, 링커가 정적 라이브러리에 링크 할 것으로 예상되는 경우 일반적으로 공유 라이브러리/dll에 연결할 수 없습니다.
gcc가있는 Linux에서는 *.a
(정적으로 링크 할 수있는 함수 집합을 제공하는 데 사용됨)과 *.so
(동적으로 링크하기 위해)이라는 공유 라이브러리라는 두 종류의 파일이 표시됩니다. 대부분의 컴파일러에서 Windows에서의 해당 기능은 *.lib
및 *.dll
입니다.
그래서 *.a
과 *.dll
은 전혀 바꿔 쓸 수 없습니다. 또한 windows 아래에 *.lib
이 고정 주소를 사용하여 정적 및 동적 연결에 모두 사용될 수 있다는 딜레마가 있습니다. 또 다른 방법은 완전히 동적으로 GetProcAddress
으로 바인딩하는 것입니다. 그러나 래퍼를 만드는 데 오버 헤드가 필요합니다. 다른 버전에서 dll을 작동 시키려면 원하는 것일 수 있습니다.
동적 라이브러리를 동적으로 링크하는 데 사용되는 것과 비교하면 정적 라이브러리의 크기가 크다는 것을 알 수 있습니다. 필자의 프로젝트에서는 모든 것을 다시 연결하지 않고 이전 응용 프로그램을위한 새로운 DLL을 새로 추가하는 기능을 좋아하기 때문에 실제로는 GetProcAddress
으로 진행됩니다.
정적 라이브러리가 동적 라이브러리보다 커야하는 이유는 없습니다. 정적 라이브러리를 사용하는 * 응용 프로그램 *은 일반적으로 더 큽니다. –
나는 dll 연결을위한 lib 파일이 함수의 주소만을 담고 있다는 것을 의미했지만, 정적 인 lib는 모든 것을 담고있다. lib 파일과 dll을 해당 lib에 비교한다는 것이 명확하지 않을 수 있습니다. 감사합니다, Jaap – jdehaan
* .a는 Linux 정적 라이브러리이므로 모든 형식이 완전히 다르기 때문에 windows .dll (동적 연결 라이브러리)과 전혀 호환되지 않습니다. 응용 프로그램을 작성한 .a에 링크해야하는 경우 Linux 정적 라이브러리 (가능한 경우)를 생성 한 소스 코드를 Windows 정적 라이브러리 (.lib)로 다시 컴파일하고 코드를 컴파일해야합니다.
공유 객체 라이브러리는 Linux에서'* .so '확장자를 가지고 있습니다. 실제로는 뉴스가 아닐지라도 알릴 가치가 있습니다 :-P – jdehaan
하지만 dll에서 정적 라이브러리를 추출한 다음 추출 된 라이브러리. – erikkallen