문제

정적 C ++ lib, static.lib가 있고 c ++ 공유 lib에서 일부 함수를 호출하고 싶습니다. shared.lib. 가능합니까?

이제 STATIC.LIB에 연결하지만 shared.lib에 링크되지 않은 Shared2.lib라고 가정합니다. 이 경우 링커가 shared2.lib를 자동으로 shared.lib에 연결합니까?

Microsoft Visual Studio 2003을 사용하고 있습니다.

도움이 되었습니까?

해결책

정적 라이브러리는 연결되어 있지 않습니다. 이들은 링커가 필요한 기호를 더 쉽게 찾을 수 있도록 라이브러리 파일 (tar/zip 파일과 같은 종류)에 보관 된 객체 파일 ( *.obj 또는 *.o)의 모음 일뿐입니다.

정적 LIB는 정의되지 않은 함수를 호출 할 수 있지만 (헤더 파일에서만 선언). 그런 다음 정적 LIB를 사용하는 EXE 또는 DLL을 연결하면 정적 리브에서 호출을 제공하지만 정의되지 않은 다른 라이브러리와 연결해야합니다.

링커에 다른 라이브러리를 자동으로 연결하려면 Stephen의 제안이 작동하며 Boost 및 Stlport와 같은 매우 평판이 좋은 라이브러리에서 사용됩니다. 이를 위해 Pragma를 정적 라이브러리의 메인 헤더 파일에 넣습니다. 정적 라이브러리와 부양 가족을 포함해야합니다.

그러나 IMO이 기능은 실제로 라이브러리가 시스템 라이브러리 경로에있는 라이브러리 작가를위한 것이므로 링커가 쉽게 찾을 수 있습니다. 또한 BOOST 및 STLPORT의 경우이 기능을 사용하여 옵션이 정의 된 동일한 라이브러리의 여러 버전을 지원합니다. #defineS가 다른 옵션마다 다른 버전의 라이브러리를 링크해야합니다. 이는 사용자가 한 방향으로 Boost를 구성하고 다른 방법으로 구성된 라이브러리와 연결될 가능성이 적다는 것을 의미합니다.

응용 프로그램 코드를 선호하는 것은 필요한 부분을 명시 적으로 연결하는 것입니다.

다른 팁

링커는 다른 라이브러리를 자동으로 가져 오지 않지만 사용할 수 있습니다. #pragma 댓글 (lib, "static.lib") Pragma를 헤더 파일에 추가하여 추가 파일을 연결하는 프로세스를 단순화합니다.

정적 C ++ lib, static.lib가 있고 c ++ 공유 lib에서 일부 함수를 호출하고 싶습니다. shared.lib. 가능합니까?

예를 들어, 정적 LIB 내에서 Windows 함수를 호출 할 때 일반적으로 일부 동적 라이브러리에서 나온 것이므로 차이가 없어야합니다.

이제 STATIC.LIB에 연결하지만 shared.lib에 링크되지 않은 Shared2.lib라고 가정합니다. 이 경우 링커가 shared2.lib를 자동으로 shared.lib에 연결합니까?

이와 같은 종속성이 있으면 나중에 문제가 발생할 수 있습니다. 대신 사용 라이브러리를 동적으로로드하는 것이 좋습니다. loadlibrary (), 그렇게하면 컴파일/링크 중에 그러한 종속성을 추적 할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top