보통 제 3 자 (비표준) C++ 라이브러리의 코드 (헤더 포함)를 사용할 때 미리 빌드 된 바이너리 파일이 내 응용 프로그램을 나타내는 대상 실행 파일에 링크되거나 포함되어 있지만 C++ 표준은 어떻게됩니까? library ?, 지금까지 C++ 표준 라이브러리의 코드 만 사용하는 라이브러리를 제공 할 필요가 없으므로 코드가 정적으로 링크되어 실행 파일에 포함됩니까?C++ 표준 라이브러리가 내 응용 프로그램과 어떻게 링크되어 있습니까?
답변
아니요, 표준 라이브러리는 기본적으로 런타임에 동적으로 연결됩니다.
동적 로더를 실행하면 동적 라이브러리가로드되고 실행되면 동적 라이브러리를위한 몇 가지 표준 위치가 표시됩니다. 그렇지 않으면 응용 프로그램이 종료됩니다. 유닉스 시스템에
:
이 는/usr/lib 디렉토리 :을 찾습니다 된 libstdC++ *
:
도 몇 있습니다 MSVCRT.DLL
: \ Windows \ System32 폴더의 모양을C 검색 경로에 영향을 줄 수있는 환경 변수 dlopen에 대한 플랫폼 맨 페이지를보고 그 내용을 확인하십시오. 플랫폼에있는 dlopen의 매뉴얼 페이지에 필요한 모든 것이 있어야합니다.
대부분의 시스템에는 적절한 위치에 이러한 라이브러리가 있으며 자동으로 검색됩니다.
나머지 STL은 추가 공유 lib 종속성을 도입하지 않습니다.
대부분이 헤더 파일에 있습니다. 템플릿 파일이 너무 많이 만들어 졌기 때문입니다. 약간은 libstdc++.so
(iostream
일 수도 있습니다.)
STL은 대부분 헤더 파일입니다. 표준 라이브러리에는 다른 것들이 포함됩니다. –
모든 C++에는 libstdC++가 필요합니다. 여기에는 표준에서 요구되는 몇 가지 필수 기능이 있습니다. –
MinGW C++ 프로그램 에 대한 유일한 기본 런타임 의존성은 MSVCRT.DLL입니다. 다른 의존성은 프로그램이 실제로하는 일에 달려 있습니다. 예를 들어 ODBC 데이터베이스 연결을 사용하는 경우 은 ODBC32.DLL (및 다른 Windows DLL)에 종속됩니다. 그러나 MinGW C++ 프로그램에서 std :: string 또는 std :: vector와 같은 클래스를 사용하면 새로운 동적 라이브러리 의존성이 도입되지 않습니다. 동적 라이브러리 의존성에 대해 고민하는 경우에
은 최근는 MinGW에서 http://www.dependencywalker.com/
에서 도구 "종속성 워커"체크 아웃의 gcc/g ++ 버전 (4.40) 당신은 오히려 정적 기본보다 공유 DLL에 링크 할 수 있습니다 라이브러리 - 플래그 -shared-libstdC++를 사용하여.
정적 버전의 라이브러리는/mingw/lib/gcc/mingw32/[gcc 버전]에 있습니다. 파일 이름은 libstdC++입니다. 이것은 MinGW로 C++ 응용 프로그램을 컴파일 할 때 기본적으로 링크됩니다.
MinGW의 기본값이 변경된 것 같습니다. 적어도 내 시스템에서는 기본적으로 libstdC++ - 6.dll을 연결합니다. '-static-libstdC++'플래그로 비활성화 할 수 있습니다. – rustyx
@rustyx 알아두면 좋을 것 같습니다. 필자는 대답을 편집하여 자유롭게 답변을 작성하고 응답을 upvote로 보내어 위로 올릴 수 있습니다. –
@rustyx -static-libstdC++ (및 -static-libgcc)을 시도했지만 아직 내 프로그램은 mingw libstd * .dll 라이브러리. 나는 왜 크로스 컴파일, 어떤 생각? –
C 및 C++ 런타임 라이브러리는 일반 라이브러리와 동일한 방식으로 링크되지만, 주요 차이점은 대개 컴파일러와 링커가 자동으로 컴파일하고 링크 할 필요가 없다는 것입니다.
그러나 일반화하면 응용 프로그램과 함께 제공 할 필요가 없습니다. 동적 링크 바이너리를 제공하는 대부분의 경우, MSVC++로 컴파일하는 경우와 같이 빌드 시스템에 설치된 것과 링크됩니다. 새 Windows 설치에서 동적으로 링크 된 바이너리를 설치하면 라이브러리가 설치 팩의 일부로 포함되지 않는 한 문제가 발생할 수 있습니다 (Visual Studio 재배포 가능 파일에 대한 설명서 참조). Solaris 시스템에서도 마찬가지입니다 (표준 라이브러리는 패치 세트의 일부로 업그레이드됩니다).리눅스에서는 GPL 때문에 정적으로 링크 할 수 없지만 라이브러리는 일반적으로 배포 패키지를 통해 설치됩니다.
좋은 답변이지만, 표준 라이브러리를 정적으로 연결하는 mingw에 대해 이야기하고있었습니다 ... – Lawand
- 1. Objective-C에는 표준 라이브러리가 있습니까?
- 2. 내 응용 프로그램과 Google지도
- 3. DLL을로드하면 동적으로 표준 오류가 주 응용 프로그램과 일치합니까? 그렇다면, 어떻게 ...?
- 4. 레코드가 테이블에 링크되어 있습니까?
- 5. 내 응용 프로그램과 ffdshow를 전달할 수 있습니까?
- 6. 내 응용 프로그램과 jre 패키징
- 7. Vista는 내 응용 프로그램과 관련된 문서 아이콘을 어떻게 생성합니까?
- 8. 몽구스가 libssl과 정적으로 링크되어 있습니까?
- 9. iPhone을 내 응용 프로그램과 동기화하는 ActiveSync
- 10. C에 대한 표준 mysql 연결 풀링 라이브러리가 있습니까?
- 11. C++ SOLR 라이브러리가 있습니까?
- 12. C++ XSLT 라이브러리가 있습니까?
- 13. public.xml의 정의가 어디에 링크되어 있습니까?
- 14. 내 휴대 전화에 응용 프로그램과 관련된 문제
- 15. iPhone 응용 프로그램과 iPhone 라이브러리를 어떻게 연결할 수 있습니까?
- 16. Objective-C 응용 프로그램과 함께 C++ 라이브러리 연결 및 사용
- 17. .net winforms 응용 프로그램과 함께 글꼴을 어떻게 묶을 수 있습니까?
- 18. 내 응용 프로그램과 함께 창을 열어 두십시오.
- 19. 내 레일 응용 프로그램과 HAML을 사용하고
- 20. Macromedia 응용 프로그램과 같은 Collapasable Menu
- 21. C# 용 콘솔 라이브러리가 있습니까?
- 22. WCF를 네이티브 (C++) 응용 프로그램과 함께 사용할 수 있습니까?
- 23. 응용 프로그램과 함께 SMB의 파일을 어떻게 추적합니까?
- 24. 왜 내 레일 프로젝트에 OSX의 $ LOAD_PATH에 루비 표준 라이브러리가 없습니까?
- 25. 표준 C++ 문법이 있습니까?
- 26. 종속성이없는 보관 라이브러리가 있습니까? (C/C++)
- 27. 트위터를 C++ 응용 프로그램과 통합하는 방법은 무엇입니까?
- 28. Win32 C++ 콘솔 응용 프로그램과 Eclipse
- 29. C# 응용 프로그램과 minifilter 드라이버 사이의 통신
- 30. memcached - C# asp.net 응용 프로그램과 함께 사용
디렉토리는'c : \ windows \ system32'입니다. 최소한 Visual Studio의 런타임이 유지됩니다. 나는 MinGW가 그들에게 링크한다고 생각하지 않는다. – avakar
그리고 mingw는 표준 C++ 라이브러리에 앱을 정적으로 연결합니다. – nos
이 답변은 완전히 정확하지 않습니다. libstdC++는 MSVCRT.DLL과 다릅니다. 후자는 * c * 라이브러리이고, 전자는 * C++ * 라이브러리입니다. MinGW에 의해 생성 된 모든 바이너리는 MSVCRT.dll에 의존 할 것이지만, 실제로 묻는 질문과 관련이 없습니다. 앞서 지적한 바와 같이 libstdC++ 라이브러리는 기본적으로 실행 파일에 정적으로 링크되어 있습니다. –