5

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

细节

我正在创建一个构建系统,它可以生成一个包含整个 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。

4

1 回答 1

6

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

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

于 2013-04-13T16:15:36.023 回答