You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac编译phone_numbers库时遭遇ld链接错误求助

解决M1 Mac上编译phone_numbers库的链接断言错误

错误原因分析

你遇到的ld: Assertion failed: (counter() < 0xffff), function nextCounter, file ld.hpp, line 466错误,本质是链接器(ld64)处理的符号/原子数量超过了内部16位计数器的上限(65535)。结合你提到的ld进程内存占用高达150MB,大概率是**链接时优化(LTO)**触发了这个问题——LTO会在链接阶段展开大量代码并分析符号,导致链接器需要处理的原子数量暴增,超出计数器阈值。

解决方案

1. 禁用链接时优化(LTO)

链接命令中包含-lto_library参数,这是触发LTO的关键。你需要修改phone_numbers库的编译配置,移除LTO相关选项:

  • 找到项目c_src目录下的Makefile,删除或注释掉包含-lto_library的行,或者添加-no_lto参数到LDFLAGS中。
  • 如果通过Mix编译,在项目mix.exs中调整编译选项传递参数给Makefile:
    def project do
      [
        # ...其他配置
        compilers: [:elixir_make] ++ Mix.compilers(),
        make_args: ["NO_LTO=1"]
      ]
    end
    
    再在c_src/Makefile中添加对应逻辑:
    ifneq ($(NO_LTO),)
      LDFLAGS += -no_lto
    endif
    

2. 重新编译libphonenumber并禁用LTO

虽然brew安装的libphonenumber测试通过,但可以尝试从源码编译时关闭LTO:

brew uninstall libphonenumber
brew install libphonenumber --build-from-source --without-lto

手动编译时可添加-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF参数关闭LTO。

3. 升级Xcode/链接器

你当前使用的ld64版本为857.1(对应Xcode 14.3.1),后续Xcode版本可能修复了计数器上限问题。尝试升级到最新Xcode后重新编译。

4. 清理重复的链接器搜索路径

你的链接命令中重复添加了-L/opt/homebrew/lib和-L.,清理这些重复路径可减少链接器搜索开销:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld \
   -demangle \
   -dynamic \
   -dylib \
   -arch arm64 \
   -flat_namespace \
   -platform_version macos 13.0.0 13.3 \
   -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk \
   -undefined suppress \
   -o /Users/michals/code/phone_numbers/priv/phone_number_util_nif.so \
   -L/opt/homebrew/Cellar/libphonenumber/8.13.17/lib \
   -L/Users/michals/.asdf/installs/erlang/25.0.2/lib/erl_interface-5.3/lib \
   -L/opt/homebrew/lib \
   -L/usr/local/lib \
   -lc++ \
   -lei \
   -lphonenumber \
   -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.3/lib/darwin/libclang_rt.osx.a \
   /Users/michals/code/phone_numbers/c_src/phone_number_util_nif.o \
   -v

内容的提问来源于stack exchange,提问作者Michał Szajbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:05:02