【问题标题】:Compiling Gnash from source fails due to giflib update - alternatives?由于 giflib 更新,从源代码编译 Gnash 失败 - 替代方案?
【发布时间】:2014-07-22 11:45:12
【问题描述】:

根据提交的错误报告here,Gnash 将无法使用最新的 giflib 进行编译。我假设这意味着如果我使用较旧的 giflib,它会编译得很好。不过,我不确定如何执行此操作 - 我的包管理器(我在 Manjaro 上,并且可以访问 AUR)在这里似乎没有帮助,而且我不确定我需要修改或做什么在这种情况下。

基本上,在我从 Savannah 获得 Gnash 的代码后,我需要做什么/更改才能使用较旧的 giflib 进行编译?

【问题讨论】:

  • 只要下载v5.0.6 here?
  • 如果该错误中报告的只有一个错误,我会尝试修复 gnash 代码中的一个位置以传递指向虚拟 int 的指针,因为您似乎在降级 giflib 时遇到问题。

标签: c++ compilation archlinux gnash


【解决方案1】:

如果您还没有看到它,Raydel notes 本身就有 a reply to your request for a workaround on the bug report

这当然是更快的解决方案,尽管在您的系统上拥有 GifLib 库的两个版本(或只是较旧的工作版本)并没有什么问题。

为此,您可以download GifLib v4.2.3 here,这是一个比破坏 gnash 编译的更改更早的版本。

要么将其放在不同的目录中(您可能在/usr/local/lib 中有 v5.1 吗?)并更改包含/链接器路径或替换 v5.1 文件,您不需要更改编译步骤完全没有。


我自己尝试了相同的步骤,但无法复制您的错误。

不包括 sudo apt-get install-ing 大量的软件包(这不是你的麻烦的原因 - 在每一步我都被告知确切缺少什么)这些是我全新安装的步骤:

$ git clone git://git.sv.gnu.org/gnash.git
$ curl http://sourceforge.net/projects/giflib/files/giflib-4.x/giflib-4.2.3.tar.bz2/download
$ tar xvjf giflib-4.2.3.tar.bz2
$ cd giflib-4.2.3
$ ./configure
$ sudo make
$ sudo make install
$ cd ../gnash
$ ./autogen.sh
$ ./configure.ac
$ sudo make
$ sudo make install

我建议您重新开始,因为这些步骤为我解决了所有问题 - 无需手动移动文件、指定编译器/链接器选项或编辑 makefile,这似乎会给您带来问题。

【讨论】:

  • Gnash 附带了通常的configure, make, make install getup,我对 Autogen 和 co 不太熟悉。我如何告诉它使用我编译的giflib(早期版本)而不是我在/usr/local/lib 中的那个(更新的)?
  • 最简单的方法是把你编译的版本放在/usr/local/lib。另一种方法是打开make/make install 使用的makefile。更改 -I/path/to/giflib/include-L/path/to/giflib-lgiflib.a,如果您编译的 ELF 与其中的名称/扩展名不同(它将以 -l 开头并以 .a,.elf,.out 等之一结束 - 最重要的是 @987654337 @ 或 readelf 会告诉你这是一个 ELF 文件。)
  • 我已将旧 giflib 的编译版本放入 /usr/local/lib(通过 make install),但我仍然遇到与以前相同的错误 - 似乎它使用的是最新的 giflib不管我说什么!那我应该删除较新的 giflib 吗?
  • 是的,删除损坏的版本make clean,然后将其放回那个目录。
  • 我试过了;我删除了之前的giflib(通过pacman -Rdd),然后制作了旧giflib 的干净版本,通过make install 安装它,并尝试了Gnash 的干净版本,但仍然得到相同的错误。
【解决方案2】:

我刚刚检查了您发布的bug report。还有一个解决方法:

作为一种解决方法,您可以将 libbase/GnashImageGif.cpp 文件的第 123 行更改如下:

GifInput::~GifInput()
{
// Clean up allocated data.
- DGifCloseFile(_gif);
+ DGifCloseFile(_gif, 0);
} 

编辑:根据我的经验,应用补丁是更好的做法。如果您使用旧版本的 giflib,您将错过在新版本中所做的任何更改。而这些更改大部分时间都是为了好的,错误修复,优化等..

【讨论】:

  • “搞乱库”比简单地安装一个不同的版本要少得多吗?请注意,它不是系统库。即使其他人使用它,拥有两个不同的版本并适当命名也没有错。
  • 你说得对,也许我表达得不好,我的意思是没有必要安装或降级到旧的 giflib。根据我的经验,应用补丁是更好的做法。如果您使用旧版本的 giflib,您将错过在新版本中所做的任何更改。而这些更改大部分时间都是好的,错误修复,优化等......
  • 没错,但正如我所说,拥有两个版本并没有什么坏处。就个人而言,我会使用旧版本,直到发布修复程序。另请注意,当 OP 询问时,该解决方法并未在此处发布 - 它是响应他的请求而提供的。
  • @KozRoss 试试这个答案,它只需要几分钟。在发表此评论时,您的问题已经存在 22 小时。如果不工作,你只会失去几分钟。但如果工程问题解决了。
  • @OllieFord,在我看来,你把我的 cmets 看得太个人化了。我之前的评论是指更改该行代码并尝试编译所需的时间。拜托,我为我的答案辩护的事实并不意味着我在攻击你的答案。花点时间阅读你的cmets,一直处于防御状态。我认为你的答案和我的一样可靠,但我会始终捍卫我的观点。争取那些代表点的方法是提高你的答案,不要批评我的cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 2021-11-13
  • 2015-11-04
  • 2011-01-22
  • 1970-01-01
相关资源
最近更新 更多