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

链接HPX库的C++程序启动报错:找不到_at_quick_exit符号

问题:HPX程序运行时出现_at_quick_exit符号未找到错误

我已通过vcpkg构建HPX库及所有必要依赖,编写了使用hpx命名空间的简单“Hello World”程序,但经CMake构建并运行时出现以下错误:

dyld[89445]: Symbol not found: _at_quick_exit
  Referenced from: <8100FA25-26C8-340E-8164-664638E7C528> /Users/shlokjain/CLionProjects/Matrix/cmake-build-debug/Matrix
  Expected in:     <B5E49904-EFC0-3BB7-9156-0C6811B8C533> /usr/lib/libSystem.B.dylib

相关文件内容

CMakeLists.txt

cmake_minimum_required(VERSION 3.30)
project(Matrix)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
find_package(HPX REQUIRED)

add_executable(Matrix main.cpp)
target_link_libraries(Matrix HPX::hpx HPX::wrap_main HPX::iostreams_component)

main.cpp

#include <iostream>
#include <hpx/iostream.hpp>

int main() {
    hpx::cout << "Hello World!\n" << std::flush;
    return 0;
}

CMake构建选项

-DHPX_DIR:PATH=/path/to/hpx/installation/lib/cmake/HPX -DCMAKE_CXX_FLAGS="-stdlib=libc++"

补充信息

  • 系统配置:2020款M1 Pro,macOS版本14.5
  • 执行otool -L ./matrix_mult的输出:
/opt/homebrew/opt/open-mpi/lib/libmpi.40.dylib (compatibility version 81.0.0, current version 81.7.0)
        /opt/homebrew/opt/hwloc/lib/libhwloc.15.dylib (compatibility version 25.0.0, current version 25.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1351.0.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1800.105.0)

输出未提及关键依赖Boost,这可能引发链接问题。

可能原因及解决方案

1. C++标准库不一致

_at_quick_exit是GNU libstdc的专属符号,而你指定了用LLVM的libc++编译程序。如果HPX或其依赖(如Boost)是用libstdc编译的,就会出现符号不匹配。

  • 解决:强制vcpkg用libc++重新构建HPX及所有依赖:
    export VCPKG_CXX_FLAGS="-stdlib=libc++"
    export VCPKG_C_FLAGS="-stdlib=libc++"
    vcpkg install hpx
    

2. Boost依赖未正确链接

otool输出中没有Boost库,说明链接阶段未正确引入HPX的依赖Boost。虽然find_package(HPX REQUIRED)理论上会自动处理,但可能因配置失效导致问题。

  • 解决:在CMakeLists.txt中显式添加Boost依赖检查:
    find_package(Boost REQUIRED)
    target_link_libraries(Matrix PRIVATE Boost::boost)
    
    同时确认HPX_DIR指向的是vcpkg安装路径下的HPX配置目录,避免引用到其他版本的HPX。

3. 架构不匹配

M1 Pro是ARM64架构,若构建HPX时使用了x86_64架构(比如通过Rosetta运行vcpkg),会导致运行时符号不兼容。

  • 解决:指定ARM64架构重新构建HPX:
    vcpkg install hpx --triplet arm64-osx
    
    同时在CMake构建时添加-DCMAKE_OSX_ARCHITECTURES=arm64,确保目标架构一致。

4. HPX构建配置错误

HPX的某些编译选项可能强制依赖GNU扩展,导致引入_at_quick_exit符号。

  • 解决:重新构建HPX时明确指定C++标准和标准库:
    vcpkg install hpx --cmake-args "-DCMAKE_CXX_STANDARD=20" "-DCMAKE_CXX_FLAGS=-stdlib=libc++"
    

内容的提问来源于stack exchange,提问作者Shlok Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:57:24