Я хочу дать кому-нибудь программу на C ++ для тестирования, но пока не хочу, чтобы они видели исходный код. Мои главные проблемы в том, что я не знаю, какую платформу использует этот человек, и я не хочу создавать общую библиотеку, если у меня нет другого выбора. В идеале я хотел бы отправить заголовки и объектные файлы, чтобы человек мог скомпилировать и связать себя, но, насколько я знаю, это сработало бы, если бы у человека были те же настройки, что и у меня.
В настоящее время я использую Windows, но мне удобно работать с любой Unix-подобной системой, и я не использую IDE, если вам нужна эта информация
Ну, среда разработки Windows позволяет вам связывать некоторые нативные, всегда обратно совместимые WinAPI функции. Распределение правильно настроенного бинарного файла .dll
файлов, вместе с постоянными заголовками, достаточно.
Для дистрибутивов Linux сценарий другой, так как вам нужно иметь распределенный пакет, скомпилированный из исходного кода (который раскрыт), или распределенные двоичные файлы для всех дистрибутивов Linux, которые вы действительно хотите поддерживать.
Если вы хотите избежать раскрытия исходного кода, когда это необходимо для компиляции на определенных целевых системах, используйте механизм лицензирования, который мешает его запускать.
Предполагая, что выбор машины является «разумным» — другими словами, это что-то под управлением Linux, Windows, Android или MacOS и разумный целевой процессор, такой как MIPS, Sparc, x86 или ARM, тогда можно использовать одно ВОЗМОЖНОЕ решение clang -S -emit-llvm yourfile.cpp
создать промежуточную форму LLVM «код виртуальной машины». Это может тогда, используя llc
, скомпилировать в машинный код для любой цели, которую поддерживает LLVM.
Не совсем невозможно приблизительно определить, как выглядит исходный код, но если кто-то не захочет приложить много усилий для запуска вашего кода, он не сможет увидеть, что делает код. И даже предоставление кому-то двоичного файла позволяет им, если они склонны так, перепроектировать код.
Другой альтернативой, на мой взгляд, является то, что вы демонстрируете код на своей машине [или машине, находящейся под вашим контролем].
Существуют также инструменты, которые могут «запутывать» исходный код (переименовывать переменные, членов структуры / класса и функции в a
, b
, c
; удалить любые комментарии; и «неформатировать» код — все это усложняет понимание того, что делает код). Извините, вам придется зайти в Google, чтобы найти хороший, так как я никогда не использовал такую вещь сам. И, опять же, конечно, НЕВОЗМОЖНО восстанавливать код в то, что можно использовать, модифицировать и перестраивать. На самом деле невозможно избежать предоставления клиенту того, что он может скомпилировать, если вы не знаете, для какой ОС / процессора он предназначен.