34

我有一个 C 库,我将其构建为 Linux 的共享对象和带有 MinGW32 的 Windows 的 DLL。API 依赖于几个数据文件(统计模型),我真的很想将它们与 SO/DLL 一起使用,以便部署只是一个文件。

看起来我可以使用windres.

有没有办法在 Linux 上实现相同的功能?

更好的是,有便携式解决方案吗?

4

2 回答 2

34

在 Linux 和其他 ELF 系统上实际上非常简单:http ://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967

OS X 有捆绑包,因此您只需将库构建为框架并将文件放入捆绑包中。

于 2010-01-04T03:23:18.573 回答
-2

两种可能的解决方案:

  • Phong Vo 的sfio库是 AT&T 高级软件技术工具集的一部分,是 C 的绝佳替代品stdio.h,它允许您使用单个 API 打开文件或内存块。因此,您可以轻松地将现有文件转换为 C 初始化数据以包含在您的 DLL 或 SO 文件中。

    这是一个很好的跨平台解决方案,但代价是入门的学习曲线非常高。他们不容易弄清楚东西是如何工作的,或者把他们的工具集的一部分分离出来以便独立于其他部分使用。但好消息是,如果你想采用他们的 U/Win 系统在 Windows 上运行 Unix 代码(都是同一个工具集的一部分),你可以使用同一个系统创建 DLL 和 SO。

  • 对于这类问题,我经常求助于 Lua;我可以将 Lua 数据存储在外部文件或 C 中作为初始化数据。这非常适合在一个 .so 文件中分发所有内容;我为我的学生这样做。

    不利的一面是您必须掌握并采用新技术。

在我自己的工作中,我使用 Lua 而不是 AT&T 的东西,原因如下:

  • Lua 的占用空间小得多,并且旨在与其他人一起玩;使用 AST,您确实确实采用了他们的做事方式。

  • Lua 的学习曲线不那么陡峭。您可以非常快速地提高工作效率。

  • Lua 非常容易安装,并且很容易获得有关它的信息。AST 有自己的古怪安装过程,世界上没有其他人共享;通常很难进行安装;并且更难获得有关它的信息。

  • 使用 Lua 有很多其他的好处,因此学习 Lua 和学习如何将 Lua 合并到 C 代码中的努力很容易分摊到多个项目中。

于 2010-01-04T03:02:50.160 回答