gpt4 book ai didi

xcode - 为 macOS 构建,但链接为独立构建的目标文件

转载 作者:行者123 更新时间:2023-12-03 16:43:56 27 4
gpt4 key购买 nike

我正在构建 ffmpeg,但我收到几个文件的以下错误。我不是专门用独立旗帜 build 的,所以不明白为什么会发生这种情况。它实际上是什么意思?它有问题,还是可以忽略的警告?如果有问题,有人知道如何解决吗?

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。或 -mmacosx-version-min或一些类似的命令行参数。
链接器然后检查所有被链接的目标文件中的此类加载命令,并在找不到此类命令或检测到不兼容时发出警告。
大多数其他编译器不知道该加载命令,并且无法将其输出到目标文件中。至少在 YASM 中发现了问题(它体现在这个问题中),in D and Go compilers , in Crystal .
不幸的是,我找不到在 FFmpeg 中为 asm 源构建好的对象或禁用该警告的解决方法。我创建了 an issue for YASM但这是一个远景——首先你需要 YASM 中的这个功能,然后你需要一种方法将所需的参数传递给 FFmpeg 构建 asm 源。
更新
从 Xcode 12 开始,它变成了一个问题,因为这个警告变成了一个错误,而且似乎没有办法禁用或忽略它。但看起来我已经设法使用 tmm1 建议的方法解决了这个问题。 .不幸的是,在当前阶段,它需要大量的手动工作。

  • 我有 forked yasm added padding到缺少的加载命令的输出目标文件。 (用于建筑调用 ./autogen.shmake )
  • 我有 forked macho_edit added a way to append the required load command with a command line invocation . (用于建筑调用xcodebuild build -configuration Release -project macho_edit.xcodeproj -target macho_edit)
  • 我有 created a shell script包装了定制的 yasm 的调用然后定制macho_edit使用必需的参数(您可以设置要在此脚本中支持的 macOS 版本和 sdk 版本)。
  • build ffmpeg我用这个包装器复制 macos_yasm_wrap.shffmpeg目录并添加--x86asmexe=`pwd`/macos_yasm_wrap.sh ./configure 的参数称呼。

  • 这似乎有效。正确的做法是将正确的命令行参数添加到 yasm (就像 Clang 支持的那样)并首先生成正确的加载命令。但是我现在没有时间这样做:(

    关于xcode - 为 macOS 构建,但链接为独立构建的目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58796267/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com