먼저 프로젝트 모델을 명확히해야합니다. "정적 라이브러리"는 대개 외부 라이브러리에 연결되지 않습니다. Static 라이브러리는 Windows의 .lib 파일에 대해서만 말하면 객체 모듈의 아카이브입니다.
응용 프로그램 실행 파일 (.exe 파일) 또는 동적 라이브러리 (.dll)를 생성 할 때만 링커를 사용합니다.
귀하의 솔루션에는 정적 라이브러리와 응용 프로그램의 기본 프로젝트라는 두 개의 프로젝트가 있다고 가정 할 수 있습니다. 동적 IPP 라이브러리에 연결하면 응용 프로그램에 IPP 기능 코드 (동적 라이브러리의 외부 함수 호출 만)가 없으므로 응용 프로그램 풋 프린트를 확실히 최소화 할 수 있습니다. 함수는 동적 라이브러리 파일에 저장되며 수백 MB가 있습니다.
정적 IPP 라이브러리로 응용 프로그램을 빌드하고 동시에 응용 프로그램 실행 파일 크기를 줄이려면 응용 프로그램에 포함 된 CPU 최적화를 동시에 제한해야합니다.
링커에 명령 줄에서 정적 IPP 라이브러리 만 사용하면 응용 프로그램 개체 파일이 다른 CPU 아키텍처 (SSE에서 AVX2)에 맞게 최적화 된 모든 함수 변형과 연결됩니다.
예를 들어 "ippSomeFunction"함수를 소스 코드에 포함 시키면 링커에서 "ippSomeFunction_SSE"+ "ippSomeFunction_SSE2"+ ... + "ippSomeFunction_AVX2"를 응용 프로그램 실행 파일에 추가합니다. 이렇게하면 응용 프로그램 크기가 늘어나지 만 현재 CPU에 대한 최적화가 가장 많은 Intel CPU에서 응용 프로그램을 실행할 수 있습니다. 디스패처는 CPU에 가장 적합한 함수 변형을 켭니다.
대상 CPU 아키텍처를 알고있는 경우 링커에서 필요한 기능 만 최적화하도록 추가 할 수 있습니다. IPP 설치 디렉토리에 "readme.htm"문서를 읽으십시오. /ipp/tools/ia32 (또는 intel64)/staticlib ".
이 경우 소스 코드에서 수행해야 할 유일한 변경 사항은 "#include ipp_ cpuletter .h"파일을 다른 IPP 관련 .h 파일 (예 :
#include "ipp_p8.h"
// From now on only IPP functions for SSE4.2 CPU will be used
#include "ippi.h"
// The rest of code