如何在不提供源代码的情况下向某人提供 c/c++ 程序
How to give someone a c/c++ programme without giving them the source
我想将 C++ 程序提供给某人进行测试,但我还不想让他们看到源代码。我的主要问题是我不知道那个人使用的是什么平台,除非我别无选择,否则我不想创建共享库。理想情况下,我想发送头文件和目标文件供此人编译和 link him/herself 但据我所知,只有当该人具有与我相同的设置时才有效。
我目前正在使用 Windows,但我也很乐意在任何类 Unix 系统上工作,而且我没有使用 IDE,以防您需要该信息
好吧,Windows 开发环境允许您绑定一些本机始终向后兼容的 winapi 函数。正确设置二进制 .dll
文件的分发以及一致的 headers 就足够了。
对于 Linux 发行版,情况有所不同,因为您需要从源代码(已公开)编译分布式软件包,或者为您实际想要支持的每个 Linux 发行版提供分布式二进制文件.
如果您想避免源代码泄露,需要在特定目标系统上编译,请使用可防止 运行 它的许可机制。
假设机器的选择是 "reasonable" - 换句话说,它是 运行 Linux、Windows、Android 或 MacOS 并且一个合理的目标处理器,例如 MIPS、Sparc、x86 或 ARM,那么一个可能的解决方案是使用 clang -S -emit-llvm yourfile.cpp
生成 LLVM "virtual machine code" 的中间形式。然后,可以使用 llc
将其编译为 LLVM 支持的任何目标的机器码。
并非完全不可能大致弄清楚源代码是什么样的,但除非有人想在 运行 您的代码中投入大量精力,否则他们将无法看到代码的内容做。甚至给某人一个二进制文件也可以让他们(如果他们愿意的话)对代码进行逆向工程。
在我看来,另一种选择是在您的机器 [或您控制的机器] 上演示代码。
还有一些工具可以 "obfuscate" 源代码(将变量、structure/class 成员和函数重命名为 a
、b
、c
;删除任何评论;和 "unformat" 代码——所有这些都使得理解代码的作用变得更加困难)。抱歉,您必须 google 才能找到一个好的,因为我自己从来没有用过这样的东西。当然,将代码恢复成可以使用、修改和重建的东西也不是不可能的。除非您知道 OS/processor 它的用途,否则确实无法避免为客户提供他们可以编译的东西。
我想将 C++ 程序提供给某人进行测试,但我还不想让他们看到源代码。我的主要问题是我不知道那个人使用的是什么平台,除非我别无选择,否则我不想创建共享库。理想情况下,我想发送头文件和目标文件供此人编译和 link him/herself 但据我所知,只有当该人具有与我相同的设置时才有效。
我目前正在使用 Windows,但我也很乐意在任何类 Unix 系统上工作,而且我没有使用 IDE,以防您需要该信息
好吧,Windows 开发环境允许您绑定一些本机始终向后兼容的 winapi 函数。正确设置二进制 .dll
文件的分发以及一致的 headers 就足够了。
对于 Linux 发行版,情况有所不同,因为您需要从源代码(已公开)编译分布式软件包,或者为您实际想要支持的每个 Linux 发行版提供分布式二进制文件.
如果您想避免源代码泄露,需要在特定目标系统上编译,请使用可防止 运行 它的许可机制。
假设机器的选择是 "reasonable" - 换句话说,它是 运行 Linux、Windows、Android 或 MacOS 并且一个合理的目标处理器,例如 MIPS、Sparc、x86 或 ARM,那么一个可能的解决方案是使用 clang -S -emit-llvm yourfile.cpp
生成 LLVM "virtual machine code" 的中间形式。然后,可以使用 llc
将其编译为 LLVM 支持的任何目标的机器码。
并非完全不可能大致弄清楚源代码是什么样的,但除非有人想在 运行 您的代码中投入大量精力,否则他们将无法看到代码的内容做。甚至给某人一个二进制文件也可以让他们(如果他们愿意的话)对代码进行逆向工程。
在我看来,另一种选择是在您的机器 [或您控制的机器] 上演示代码。
还有一些工具可以 "obfuscate" 源代码(将变量、structure/class 成员和函数重命名为 a
、b
、c
;删除任何评论;和 "unformat" 代码——所有这些都使得理解代码的作用变得更加困难)。抱歉,您必须 google 才能找到一个好的,因为我自己从来没有用过这样的东西。当然,将代码恢复成可以使用、修改和重建的东西也不是不可能的。除非您知道 OS/processor 它的用途,否则确实无法避免为客户提供他们可以编译的东西。