序言
这可能是一个 xy problem ,所以如果有更好的方法来解决这个问题,我愿意接受偏离原始问题的建议。
问题
我有一个相当大的程序,可以生成大量指标、统计数据等。我需要的一个重要计算是能够生成复杂数学运算的输出。可以生成此输出的唯一工具是第三方供应商提供的应用程序。供应商很乐意为我的公司编译适用于任何操作系统/历史/架构的应用程序,但他们无法向我们提供源代码。因此,我们的程序必须依赖作为同一项目的一部分交付的预编译程序,以及通过 popen()
启动的供应商程序。
由于安装失误和其他问题,有时 popen()
调用会因路径问题、文件被移动等原因而失败。这些不是我们可以控制的,但是然而,客户将其归咎于开发人员。
问题
有什么方法可以使用简单的 c加上 make在 linux程序,以某种方式将外部应用程序嵌入到我们自己的应用程序中,以便可以将其popen()
'ed 到私有(private)内存映射中,以便该程序始终可用于我们的“主”应用程序?
理想情况下,我们只需将此程序的源代码添加到我们自己的代码库中并解决问题,但我们无法做到这一点。
最佳答案
如果您真的必须将您的应用程序作为一个没有辅助文件的二进制文件发送1,您可以使用链接器将整个二进制文件链接到您的应用程序中。充实了 Linux/ELF/ld
的具体细节 in this answer .
然后,在运行时,只需将二进制文件写入一个临时文件,然后 chmod(2)
权限以编程方式包括执行,最后 popen
它就像您一直在做的那样。
1 因为如果这不是必需的,供应商提供的应用程序可以被视为必须存在的任何其他辅助文件。我看不出客户如何比应用程序目录中的其他文件更能搞砸可执行文件。
关于c - 将预编译的应用程序嵌入另一个 C 程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42990862/