Статическая библиотека C ++ ужасно плохо распространяется;
Это бот тангенциальный, но здесь нужно упомянуть IMO. Есть много опций компилятора, которые должны соответствовать вызывающей стороне:
- Ansi / Unicode,
- статическая / динамическая связь ЭЛТ,
- обработка исключений включена / отключена,
- представление указателей на функции-члены
- LTCG
- Debug / Release
Это до 64 конфигураций!
Кроме того, они не переносимы между платформами, даже если ваш код C ++ не зависит от платформы - они могут даже не работать с будущей версией компилятора на той же платформе! LTCG создает огромные .lib файлы. Таким образом, даже если вы можете опустить некоторые варианты, у вас огромный размер сборки и распространения, а также общий PITA для пользователя.
Это основная причина, по которой я бы не стал покупать что-либо, которое поставляется только со статическими библиотеками, а тем более что-то, что добавляет защиту от копирования любого рода.
Идеи реализации
Я не могу придумать ни одного лучшего фундаментального механизма, чем предложение Шмуопти.
Вы можете дополнительно «пометить водяными знаками» свои сборки, чтобы, если вы обнаружили библиотеку «в дикой природе», вы могли определить, кому вы ее продали. (Тем не менее, что вы собираетесь делать? Написать гневные электронные письма потенциально невиновному клиенту?) Кроме того, это требует определенных усилий, так как использование легко определяемой последовательности байтов, не влияющей на выполнение, не сильно поможет.
Вам необходимо защитить себя от инструментов LIB "unpacker". Однако компоновщик должен иметь возможность удалять неиспользуемые функции.
Общие мысли
Внедрение механизма достойной защиты требует большой осторожности и некоторой креативности, и я еще не видел ни одного, который бы не создавал дополнительных затрат на поддержку и требовал бы жестких социальных решений. Каждый час, потраченный на защиту от копирования, это не час, потраченный на улучшение вашего продукта. Рынок кода C ++ не очень большой, я вижу много работы, за которую должны платить ваши клиенты.
Когда я покупаю код, я с радостью плачу за документацию, поддержку, исходный код и другие признаки "будущего". Не так много для лицензирования.