【问题标题】:C/C++ - Hide C or C++ function code from other peopleC/C++ - 对其他人隐藏 C 或 C++ 函数代码
【发布时间】:2026-02-12 03:25:11
【问题描述】:

我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他访问在他自己的代码中调用该函数。 可能吗? 我想到了这两种方法 -

  • 在某个服务器上托管该功能(如果可能的话)并为雇主提供一个 URL 以访问它。
  • 保护函数代码文件的密码(同样,如果可能的话)并且只允许访问以在代码中调用它。

请告诉我这些是否可行,并给我一个方法。

【问题讨论】:

  • 编译一个共享库(.sodll,...)并将库和接口头文件提供给团队。
  • 将代码分发为头文件和库。但是雇主,如果他有意识的话,会要求源代码(你听说过'开源'吗?),如果只是因为你有合同提供给他。
  • 这两种方法都不可行,通常由雇主决定是否允许您向他们隐瞒。通常,您的雇主拥有您“全天候”或使用公司设备编写的所有代码。

标签: c++ c


【解决方案1】:

如上所述,您只需将代码分成头文件和源文件。然后,您的编译器在编译时会生成一个目标文件;或共享对象。然后您可以将目标文件与头文件一起发送。唯一的缺点是您必须针对您所针对的每个硬件架构进行编译。这是最简单的方法之一,即发送带有头文件的目标文件。

//file foo.h
void * foo(int );

和实施

//foo.c
#include "foo.h"
void * foo(int x)   
{
 //your code
};

现在用 gcc 编译它

gcc -c foo.c -o foo.o

这些生成 foo.o。现在您可以将 foo.h 与 foo.o 一起发送,或者最好是由对象文件制成的共享对象。

现在您的客户可以使用您的代码仅获取头文件和 .o 文件。

//file foouser.c 
 #include "foo.h"
 void * x = foo(2);

假设 foo.o 和 foo.h 在同一个目录中,

gcc foouser.c -lfoo -o foouser

将生成可执行的 foouser。

有一个共享对象版本的教程here和一篇关于链接器和加载器的好文章here

【讨论】:

    【解决方案2】:

    您可以将您的 c++ 代码编译为静态或动态库

    在头文件中创建函数定义的方法

    在 .cpp 文件中实现这些功能

    使用您的头文件将其编译为静态库或动态 dll,也就是具有函数声明的那个

    在 Linux 上 http://www.iram.fr/~roche/code/c++/AddNumbers.html

    在窗户上 https://msdn.microsoft.com/en-us/library/ms235627.aspx

    【讨论】:

      【解决方案3】:

      如果编译记得可以反编译。

      您可以做到这一点的唯一方法可能是设置您托管的网络服务(或者更有可能是您付费购买的云服务)。

      还请记住,您将无限期地维护它,您可能需要协商维护费用。

      【讨论】:

        【解决方案4】:

        编译并提供 .a、.so 、.dll 格式。

        在此之前了解它们之间的区别 Difference between shared objects (.so), static libraries (.a), and DLL's (.so)?

        【讨论】: