结构内容发生变化的库文件(.a)

Library file (.a) where the contents of the structure changes

我正在用 C 语言创建一个算法,该算法是机密的,不能与外部客户共享。因此,我决定创建一个库 (.a) 文件来编译我的算法并让其他人在不修改它的情况下使用它。它基本上改变了结构中变量的数据。现在,这样的结构在外部是可见的(该结构在我的 .c 文件中包含的单独头文件中定义)并根据用户的配置生成。但是所述变量始终存在于结构中 - 只有剩余的数据会根据用户的配置进行更改。

问题是,如果结构与我用来创建库文件的结构不完全相同,代码就会失败。 那么,如果结构本身一开始不可用,有没有办法创建一个库文件来修改结构中的数据?

非常感谢任何帮助...

从技术上讲,您使用的所有结构在任何地方都必须逐字符相等。如果您在两个(或更多)translation units that will lead to undefined behavior.

中的相同结构之间有任何差异

虽然有一些方法可以解决这个问题,例如使用嵌套结构。例如,您可以创建一个结构来包含您的私有数据,然后创建另一个结构,其 first 成员是第一个私有结构的实例。

例如这样的事情:

struct private_data
{
    // TODO: The private members here
};

struct public_data
{
    struct private_data private;
    // TODO: The public members here
};

这实际上类似于面向对象语言的继承。指向 public_data 结构的指针可以转换为指向 private_data 结构的指针,并传递给需要它的函数。

要保留私人数据,嗯,私人 你可以使用 opaque data types and opaque pointers:

// Forward declaration of the actual private data
struct actual_private_data;

// The "public" private structure
struct private_data
{
    // Pointer to the actual private data
    struct actual_private_data *private;
};

请务必注意,这仅适用于图书馆使用的 私有 数据。如果 public 数据结构也包含库需要访问的数据,您可能需要重命名 private_data 结构并将公共数据放在那里。请注意,此公共数据 必须 在结构的所有变体中,它不能自动生成与库中使用的不同.

如果您只对结构的一个数据成员感兴趣,那么在您的机密应用程序中获取该变量的地址并修改它的值。