如何像GFortran一样在flang-new中静态链接标准库?
Clang+flang-new环境下Fortran静态链接解决方案
关键差异:flang-new与GFortran的链接依赖
GFortran通过-lgfortran链接运行时,而flang-new的运行时依赖libflangrt(Fortran核心运行时)和libpgmath(数学计算库),不存在libflang库,因此直接使用-lflang会触发找不到库的错误。未定义符号如_FortranAioBeginExternalFormattedOutput属于flang的IO运行时模块,需链接libflangrt解决。
方案1:手动指定静态库链接
- 确认flang-new安装路径的
lib目录下存在静态库:libflangrt.a、libpgmath.a,部分版本可能还需LLVM基础静态库(如libLLVMSupport.a)。 - 在CMake中替换原GFortran的链接配置:
# 替换原有的 -static-libgfortran gfortran target_link_libraries(Project -Bstatic # 强制后续链接静态库 flangrt pgmath -Bdynamic # 恢复动态库链接(若有其他动态依赖) # 若需要LLVM基础库,按需添加,例如: # LLVMSupport # LLVMCore )- 若CMake无法定位库路径,手动添加链接目录:
link_directories(/path/to/flang-new/lib)
- 若CMake无法定位库路径,手动添加链接目录:
方案2:使用flang-new作为链接驱动
让flang-new自动处理链接逻辑(推荐):
- 在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>") - 此配置下,flang-new会自动识别并链接所有必要的Fortran运行时库,无需手动指定
flangrt或pgmath。
额外提示
- 可通过
flang-new --print-search-dirs命令查看flang-new的库搜索路径,确认静态库位置。 - 不同安装方式(源码编译/包管理器)可能导致库路径略有差异,需根据实际环境调整。
内容的提问来源于stack exchange,提问作者Tyler Shellberg
相关产品推荐
相关产品推荐

