【问题标题】:Compile shared library into a program?将共享库编译成程序?
【发布时间】:2011-08-01 15:54:05
【问题描述】:

我编写了一个程序,它使用安装在我系统上的共享库。这个库很少安装在其他系统上。如何编译我的程序以使库不需要安装在其他系统上?我有可用的库的源代码。最好的方法是什么?

其他系统当然具有相同的架构和操作系统。

【问题讨论】:

  • 一个框架会有所帮助。这是在 Windows 中吗?
  • Linux 和 C99 使用 gcc。

标签: c linux gcc shared-libraries


【解决方案1】:

将其编译为静态库并将其链接到可执行文件中。

【讨论】:

  • 你能提供一个简短的例子吗?
  • 什么,使用ar创建静态库,还是将-static传递给gcc告诉它使用静态库?
  • 没关系。 -static 选项是我所需要的。非常感谢。没想到这么容易。很抱歉浪费了您的时间。
【解决方案2】:

虽然 OP 通过回答不同的问题解决了他的问题,但有(至少)两种方法可以将共享库插入到您的二进制文件中

  • 没有可用的源代码
  • 没有可用的编译器(或构建链)
  • 静态链接失效或不明显怎么办
  • 保留内存布局 - 静态链接会更改它并可能“唤醒”隐藏的错误
  • 将“永久链接”LD_PRELOAD 库转换为可执行文件

第一个是statifier(开源但仅限于x86和x86_64且仅限目标代码)

我所知道的第二个是魔法貂皮(由同一开发者开发)。它是闭源的,但开发者对开源项目很友好,ermine 具有支持更多平台的优势,并且能够在其虚拟文件系统中包含所有必要的数据文件。

http://statifier.sourceforge.net/http://www.magicermine.com/

【讨论】:

  • 感谢您的建议 - Magic Ermine Light 的试用版似乎对我有用。
猜你喜欢
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多