Во-первых, необходимо уточнить модель вашего проекта. «Статическая библиотека» обычно не связана ни с одной из внешних библиотек. Статическая библиотека — это просто архив объектных модулей, если мы, конечно, говорим о .lib-файлах Windows.
Вы используете компоновщик только при создании исполняемого файла приложения (файл .exe) или динамической библиотеки (.dll).
Я могу предположить, что ваше решение имеет два проекта - один для статической библиотеки и проект по умолчанию для приложения. В этом случае привязка к динамической библиотеке IPP определенно минимизирует объем приложения, поскольку приложение не содержит кода функции IPP (только вызовы внешней функции из динамической библиотеки). Функции хранятся в файлах динамических библиотек, это сотни мегабайт.
Если вы хотите создать приложение со статическими библиотеками IPP и в то же время уменьшить размер исполняемого файла приложения, вам необходимо одновременно ограничить оптимизацию ЦП, включенную в ваше приложение.
Когда вы ничего особенного не делаете, просто используете статические библиотеки IPP в командной строке для компоновщика, объектный файл приложения линкуется со всеми вариантами функций, оптимизированными для разных архитектур ЦП (от SSE до AVX2).
Например, если вы включили функцию "ippSomeFunction" в свой исходный код, компоновщик добавит "ippSomeFunction_SSE" + "ippSomeFunction_SSE2" + ... + "ippSomeFunction_AVX2" в исполняемый файл приложения. Это увеличит размер приложения, но позволит выполнять ваше приложение на любом из процессоров Intel с максимальной оптимизацией для текущего процессора. Диспетчер включит наиболее подходящие для процессора варианты функций.
Если вы знаете целевую архитектуру ЦП, вы можете сделать компоновщик, чтобы добавить только необходимую оптимизацию функций. Прочтите документ "readme.htm" в каталоге установки IPP "/ipp/tools/ia32 (или, intel64) /staticlib".
В этом случае единственное изменение, которое вам нужно сделать для исходного кода, — это добавить файл «#include ipp_cpuletter.h» перед включением других файлов .h, связанных с IPP, например.
#include "ipp_p8.h"
// From now on only IPP functions for SSE4.2 CPU will be used
#include "ippi.h"
// The rest of code
person
Sergey Khlystov
schedule
04.02.2015