0

对于这个冗长的问题,我提前道歉,但我想确保我没有遗漏任何可能改变您的回答的关键点。

我负责维护用“C”编写的系统软件,我们有一些常见的“.a”库。我们有一个我称之为“执行管理器”的东西,他的主要工作是分叉和执行“测试作业”可执行文件的变量列表,并在测试作业过程终止后将控制权返回给执行管理器。所有可执行文件,包括执行管理器,都与上述库静态链接。执行管理器和它派生的测试作业进程通过共享内存使用 IPC。其中一个公共库包含包装函数,用于创建和附加共享内存,其中包含一个永远不会更改的预定义密钥。

几个月前,我们锁定了我们的软件(测试作业加上执行管理器),静态编译它们并发布它们以对测试作业进行“验证”。从那时起,已经有一些对执行管理器进行更改的请求,这将需要更改一些选定的公共库函数。但是,管理层决定他们不想针对新版本的公共库重新编译测试作业,因为这将要求他们重新验证他们当前拥有的测试作业可执行文件;他们不想为此花钱。

由于所有可执行文件都是静态编译的,我通常会说将执行管理器与针对同一公共库的不同版本静态编译的测试作业混合不会有问题。然而,通过共享内存包含 IPC 让我想知道这是否仍然正确。我的直觉是,只要共享内存包装函数没有变化,尤其是密钥,那么我们应该没问题,但我真的可以在这方面使用一些专家意见。

感谢您花时间阅读本文,非常感谢。

4

2 回答 2

2

你应该没问题,只要定义进程如何通过共享内存相互通信的数据结构和协议没有改变。(也就是存在于两个进程之间的你的小 ABI)。

于 2010-01-20T03:48:15.283 回答
1

我想确认caf所说的。您已经正确识别了关键位:用于访问共享内存的密钥和包装函数。这些位不关心它们是否在 .o 文件中定义,它们是否是 .a 文件的一部分,或者它们在 .a 文件中的什么位置。在链接时,它们被拉入 exe,保持其原始功能;他们在 .a 文件中的“临时住所”不会影响他们如何找到共享内存段,他们如何确定相关的偏移量等。所以如果这些(即密钥和包装函数)没有改变,你应该设置。

于 2010-01-20T05:47:41.003 回答