如何给某人一个c / c ++程序而不给他们提供源代码

时间:2015-09-15 21:26:31

标签: c++ software-distribution

我想给某人一个C ++程序进行测试,但我不希望他们看到源代码。我的主要问题是我不知道该人正在使用什么平台,除非我没有其他选择,否则我不想创建共享库。理想情况下,我想发送头文件和目标文件供该人编译和链接他/她自己,但据我所知,只有当这个人拥有与我相同的设置时才会有效。

我目前正在使用Windows,但我也很适合在任何类Unix系统上工作,我不使用IDE,以防您需要这些信息

2 个答案:

答案 0 :(得分:2)

嗯,Windows开发环境允许您绑定一些本机始终向后兼容的函数。正确设置的二进制.dll文件的分发以及一致的标头就足够了。

对于Linux发行版,场景是不同的,因为您需要从源(已公开的)编译分布式软件包,或者您实际想要支持的每个Linux发行版的分布式二进制文件。

如果您想避免在特定目标系统上进行编译所需的源代码泄露,请使用阻止其运行的许可机制。

答案 1 :(得分:2)

假设选择机器是合理的" - 换句话说,它运行Linux,Windows,Android或MacOS以及合理的目标处理器(如MIPS,Sparc,x86或ARM),然后一个可能的解决方案是使用clang -S -emit-llvm yourfile.cpp来生成中间体LLVM的形式"虚拟机代码"。然后,可以使用llc将其编译为LLVM支持的任何目标的机器代码。

根本不可能完全弄清楚源代码的外观,但除非有人想要投入大量精力来运行代码,否则他们无法看到代码是什么确实。甚至给某人一个二进制文件也允许他们(如果他们倾向于那样)对代码进行反向工程。

另一种选择,就像我看到的那样,是你在你的机器[或你控制的机器]上演示代码。

还有一些工具可以"混淆"源代码(将变量,结构/类成员和函数重命名为abc;删除任何注释;以及" unformat"代码 - 所有这使得理解代码的内容变得更加困难。对不起,您必须谷歌才能找到一个好的,因为我自己从未使用过这样的东西。当然,将代码恢复为可以使用,修改和重建的东西并不是不可能的。除非你知道它是用什么操作系统/处理器,否则没有办法避免给客户一些他们可以编译的东西。