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

ARM64架构下C++项目编译链接缺失符号问题求助

问题定位与解决方案

一、LDAP/nghttp2/libidn2未定义符号问题

排查与解决步骤

  • 强制链接自定义编译的libcurl:系统预装的libcurl可能默认带有LDAP/nghttp2等模块,会被CMake优先识别。需在CMake配置中明确指定自定义libcurl的路径:
    # 方式1:指定安装路径查找
    find_package(CURL REQUIRED PATHS "/path/to/your/custom/curl/install")
    # 方式2:直接链接静态库
    target_link_libraries(your_project_target PRIVATE /path/to/your/custom/curl/lib/libcurl.a)
    
  • 验证libcurl编译参数是否生效:重新编译libcurl时,务必检查configure输出,确认存在LDAP support: no、nghttp2 support: no、libidn2 support: no的标识。建议添加--enable-static --disable-shared参数生成静态库,彻底规避动态库依赖冲突。
  • 排查间接依赖链:项目中其他第三方库可能间接引入了带多余模块的libcurl。可通过以下命令查看二进制依赖树:
    • Linux ARM64:ldd your_project_binary
    • macOS ARM64:otool -L your_project_binary
      找到冲突来源后替换为自定义编译的libcurl版本。

二、_bcrypt_gensalt与libcrypt依赖问题

解决步骤

  • 确认自定义libbcrypt的架构兼容性:检查libbcrypt库是否为ARM64架构编译:
    • Linux ARM64:file libbcrypt.a
    • macOS ARM64:lipo -info libbcrypt.a
  • 解决libcrypt找不到的问题:
    • Linux ARM64:安装系统依赖包sudo apt-get install libcrypt-dev
    • macOS ARM64:通过Homebrew安装brew install libxcrypt,并在CMake中指定路径:
      find_library(LIBCRYPT NAMES libxcrypt crypt PATHS "/opt/homebrew/lib")
      if(NOT LIBCRYPT)
        message(FATAL_ERROR "libcrypt not found")
      endif()
      
  • 正确链接依赖库:在CMake中将自定义libbcrypt与libcrypt一起链接到目标:
    target_link_libraries(your_project_target PRIVATE /path/to/your/libbcrypt.a ${LIBCRYPT})
    

三、ARM64架构一致性检查

  • 确保CMake配置明确指定ARM64架构,避免混合架构问题:
    • macOS:
      set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Build architecture")
      
    • Linux:
      set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
      set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
      

内容的提问来源于stack exchange,提问作者Varun Naharia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:16:11