【问题标题】:C project suddenly not compiling on macOS "building for macOS-x86_64 but attempting to link with file built for unknown-arm64"C 项目突然无法在 macOS 上编译“为 macOS-x86_64 构建但试图链接为未知-arm64 构建的文件”
【发布时间】:2022-08-24 04:04:34
【问题描述】:

问题

在过去的几周里,我一直在从事一个建立在Intel ISA-L 库之上的擦除编码项目。

一切都很顺利,因为我只是调试了一段时间,然后我离开了这个项目大约一天。我返回继续调试,并且没有对代码或我的 Macbook(据我所知)进行任何更改,我尝试再次编译代码作为调试过程的一部分,但出现以下错误:

ld: warning: -undefined dynamic_lookup is incompatible with dyld share cache
ld: warning: ignoring file raid/.libs/raid_base.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file erasure_code/.libs/ec_base.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file crc/.libs/crc_base.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file crc/.libs/crc64_base.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/hufftables_c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/igzip.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/igzip_base.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/igzip_icf_base.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/adler32_base.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/encode_df.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/flatten_ll.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/igzip_icf_body.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file mem/.libs/mem_zero_detect_base.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/huff_codes.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file igzip/.libs/igzip_inflate.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: -undefined dynamic_lookup cannot be used to find \'_ec_encode_data_base\' in dylib in dyld shared cache for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [libisal.la] Error 1

我尝试了几种在 Stack Overflow 和其他在线资源上看到的潜在解决方案,但都没有奏效。我还尝试在标准 ISA-L 库上编译代码,而无需添加任何其他代码,但出现了同样的问题。

附加信息:

  • 我正在使用 M1 Apple 芯片在 macOS Monterey 12.5 上运行 2020 MacBook pro。

  • 这是clang --version 的输出:

Apple clang version 13.1.6 (clang-1316.0.21.2.5)
Target: x86_64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  • 这是echo $PATH 的输出:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  • Makefile 相当复杂,我认为是由英特尔 ISA-L 库中的某些代码自动生成的,所以我没有在此处包含它,但我希望这不是特定于我的情况的问题并且有一个适用于许多情况的通用解决方案。

  • 让我知道是否需要任何其他细节。

  • 没有看到任何编译器错误。 ld 是链接器。您正在混合 arm 和 x86_64 库的某个地方。

标签: c macos compilation x86-64


【解决方案1】:

我找到了一个帮助我解决这个问题的解决方案(尽管它发现了一个更深层次的不相关的错误),我认为这可能对其他人有帮助。

显然,由于我在 M1 MacBook Pro 上运行,clang --version 的输出应该是arm64-apple-darwin21.6.0 而不是x86_64-apple-darwin21.6.0

运行命令arch 也返回i3864 而不是arm64,这是一个问题。

为了解决这个问题,我运行了以下命令:

env /usr/bin/arch -arm64 /bin/zsh --login

我不确定这是一个彻底的解决方案还是只是一个快速修复,但在重新启动后,我得到了用 ARM 编译的铿锵声。

【讨论】:

    猜你喜欢
    • 2021-04-24
    • 2022-01-04
    • 1970-01-01
    • 2022-06-23
    • 2021-09-24
    • 1970-01-01
    • 2021-12-29
    • 2021-08-18
    • 2021-02-28
    相关资源
    最近更新 更多