ffdshow-tryout中ffmpeg 用gcc-4.5.2 x64编译失败原因

前段时间一直折腾64位ffdshow-tryout,唯独ffmpeg始终无法编译成功,链接的时候出现一堆undefined reference。但是其他软件都能正常编译运行。后来看了ffdshow-tryout的官方编译用的gcc-4.4.4,于是我从x264官方用的64位gcc的网站找了个64位的gcc-4.4.5和gcc-4.5.2来测试,发现gcc-4.5.2依然链接失败,但是gcc-4.4.5却可以成功。于是打算自己编译gcc-4.4.5的64位,但又遇到问题,用自己电脑上的gcc-4.5.2交叉编译的64位gcc-4.4.5完全无法用。没办法于是用komisar的gcc-4.4.5来交叉编译,一路很顺利,直到编译译完mingw-w64 crt后,在编译libgcc时configure都失败。看看config.log依然是链接失败,crt中一堆undefined reference。没办法,尝试自己编译了32位的gcc-4.4.5,再交叉编译,问题依旧。之后发现komisar的gcc都是用的static编译,随即我也将gcc配置成static,libgcc算是编译成功了,但之后的lib则依然出现undefined reference。在无计可施的情况下,google了一堆东西,终于在一个网站上找到一点资料

You can use the binutils-cvs with gcc 4.4 series if you configure
binutils with --enable-leading-mingw64-underscores
You can build gcc 4.5 and 4.6 against older versions of binutils (or
binutils built with --enable-leading-mingw64-underscores) with the
same option during gcc's configure.

由于我用的binutils是最新的snapshot,于是我加上–enable-leading-mingw64-underscores重新编译一次,之后重新编译了crt和libgcc,终于正常了。后来仔细搜索了一下enable-leading-mingw64-underscores的资料,发现俄罗斯的视频技术网站XvidVideo.RU上的ffdshow-tryout是用gcc-4.5.3编译的,然后该网站提供的gcc均加上了–enable-leading-mingw64-underscores的参数,看来我电脑上ffmpeg链接失败应该是这个原因,于是又重新编译了一次gcc-4.5.2,终于ffdshow能够正常编译了。总的来说应该是mingw64符号前缀变化导致的一系列问题。但是官方wiki编译指南并没有说明。

此条目发表在分类目录,贴了, , , , , , , 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据