我正在构建 ffmpeg,并且多个文件出现以下错误。我不是专门用独立式旗帜构建的,所以不明白为什么会发生这种情况。它到底意味着什么?它有问题吗,还是一个可忽略的警告?如果出现问题,有人知道如何解决吗?
Building for macOS, but linking in object file (~/Git/FFmpeg/FFmpegXcode/lib/libavutil.a(imgutils.o)) built for free standing
问题出在 FFmpeg 构建中的 .asm 文件。
Apple Clang 在目标文件中嵌入了一个特殊的加载命令,其中包含目标平台、系统版本和 SDK 版本-target
or -mmacosx-version-min
或一些类似的命令行参数。
然后,链接器检查所有链接的目标文件中的此类加载命令,并在找不到此类命令或检测到不兼容时发出警告。
大多数其他编译器不知道该加载命令,也无法将其输出到目标文件中。至少在 YASM 中发现了问题(在本期中有所体现),在 D 和 Go 编译器中 https://github.com/golang/go/issues/33214#issuecomment-541353859, 水晶中 https://github.com/crystal-lang/crystal/issues/7884.
不幸的是,我找不到解决方法来为 FFmpeg 中的 asm 源构建良好的对象或禁用该警告。我已经创建了YASM 的一个问题 https://github.com/yasm/yasm/issues/141但这是一个漫长的过程 - 首先您需要在 YASM 中使用此功能,然后您需要一种方法将所需的参数传递给 FFmpeg 构建 asm 源。
UPDATE
从 Xcode 12 开始,它成为一个问题,因为这个警告变成了一个错误,而且似乎没有办法禁用或忽略它。但看起来我已经成功地使用建议的方法解决了这个问题tmm1 https://stackoverflow.com/users/332798/tmm1。不幸的是,在现阶段,它需要大量的手动工作。
- I've forked yasm https://github.com/desktop-app/yasm/tree/macos_padding and 添加填充 https://github.com/desktop-app/yasm/commit/e129811f26db5db8eaa89264b6894850d9c25a76到缺少加载命令的输出目标文件。 (用于建立呼叫
./autogen.sh
and make
)
- I've forked macho_edit https://github.com/desktop-app/macho_edit and 添加了一种通过命令行调用附加所需加载命令的方法 https://github.com/desktop-app/macho_edit/commit/2e22c7cc5040f6e73dfb5302f0749d718a438642。 (用于建立呼叫
xcodebuild build -configuration Release -project macho_edit.xcodeproj -target macho_edit
)
- I've 创建了一个 shell 脚本 https://github.com/desktop-app/patches/blob/master/macos_yasm_wrap.sh包装了定制的调用
yasm
然后定制macho_edit
带有必需的参数(您可以设置要在此脚本中支持的 macos 版本和 sdk 版本)。
- 建造
ffmpeg
用这个包装我复制macos_yasm_wrap.sh
to the ffmpeg
目录并添加--x86asmexe=`pwd`/macos_yasm_wrap.sh
论证./configure
call.
这似乎有效。正确的方法是将正确的命令行参数添加到yasm
(就像 Clang 支持的那样)并首先生成正确的加载命令。但我现在没有时间这样做:(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)