如何将GraphicsMagick与应用程序捆绑在一起?

时间:2013-03-26 14:52:31

标签: ubuntu deployment build web-deployment graphicsmagick

我想将一个独立版本的GraphicsMagick gm二进制文件与应用程序捆绑在一起,这样我就不必在应该运行应用程序的服务器上构建和安装GraphicsMagick库。 / p>

详细

我正在创建一个构建系统,可以生成一个包含整个node.js应用程序的tar-ball,其中包括所有二进制依赖项(在我们的例子中是node二进制文件和GraphicsMagick库)。然后它将其上传到服务器,提取并运行它。

我尝试使用预编译的gm二进制文件发送它,但正如预期gm依赖于几个库,因此我收到gm: error while loading shared libraries: libGraphicsMagick.so.3: cannot open shared object file: No such file or directory之类的错误。

我在本地运行OSX,我们的服务器运行Ubuntu。

1 个答案:

答案 0 :(得分:6)

解决方案是从源代码构建GraphicsMagick并使用选项--disable-shared --disable-installed进行配置。这将生成一个静态可重定位的可执行文件,它只依赖于系统上已有的共享库。通过'make DESTDIR = / tmp / gminstalldir install'之类的东西安装到临时目录中进行打包。您还需要评估哪些库在目标操作系统上是标准可用的(因此可以依赖它们),并添加配置选项以禁用那些不确定可用的库,或者链接到库的静态版本所以它包含在'gm'二进制文件中。

另一个解决方案是获取库存'gm'二进制文件并创建一个shell脚本包装器,它设置某些环境变量(例如LD_LIBRARY_PATH),以便它仍然可以运行。这种方法会增加一些运行时开销,并且需要一些试验/错误才能使其正常工作。