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

如何像GFortran一样在flang-new中静态链接标准库?

Clang+flang-new环境下Fortran静态链接解决方案

关键差异:flang-new与GFortran的链接依赖

GFortran通过-lgfortran链接运行时,而flang-new的运行时依赖libflangrt(Fortran核心运行时)和libpgmath(数学计算库),不存在libflang库,因此直接使用-lflang会触发找不到库的错误。未定义符号如_FortranAioBeginExternalFormattedOutput属于flang的IO运行时模块,需链接libflangrt解决。

方案1:手动指定静态库链接

  1. 确认flang-new安装路径的lib目录下存在静态库:libflangrt.a、libpgmath.a,部分版本可能还需LLVM基础静态库(如libLLVMSupport.a)。
  2. 在CMake中替换原GFortran的链接配置:
    # 替换原有的 -static-libgfortran gfortran
    target_link_libraries(Project
        -Bstatic  # 强制后续链接静态库
        flangrt
        pgmath
        -Bdynamic # 恢复动态库链接(若有其他动态依赖)
        # 若需要LLVM基础库,按需添加,例如:
        # LLVMSupport
        # LLVMCore
    )
    
    • 若CMake无法定位库路径,手动添加链接目录:
      link_directories(/path/to/flang-new/lib)
      

方案2:使用flang-new作为链接驱动

让flang-new自动处理链接逻辑(推荐):

  1. 在CMake中配置链接器为flang-new:
    # 指定使用lld链接器(flang-new默认适配)
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
    # 替换C++链接器为flang-new
    set(CMAKE_CXX_LINK_EXECUTABLE "flang-new <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
    
  2. 此配置下,flang-new会自动识别并链接所有必要的Fortran运行时库,无需手动指定flangrt或pgmath。

额外提示

  • 可通过flang-new --print-search-dirs命令查看flang-new的库搜索路径,确认静态库位置。
  • 不同安装方式(源码编译/包管理器)可能导致库路径略有差异,需根据实际环境调整。

内容的提问来源于stack exchange,提问作者Tyler Shellberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:17:15