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

WSL中Conan+pybind11/3.0.1与C++23的libstdc++.so链接错误求助

解决WSL Ubuntu24.04下Conan+pybind11+C23的libstdc兼容问题

问题根源是pybind11的Conan包构建/链接时引入了Anaconda环境的libstdc++.so.6,该版本不支持C++23所需的GLIBCXX_3.4.31;移除pybind11后,编译链自动使用系统/usr/lib下的兼容版本。以下是针对性解决方案:

1. 隔离Conan环境,屏蔽Anaconda干扰

Anaconda的环境变量(如LD_LIBRARY_PATH)会让链接器优先搜索其自带库,运行Conan前先清理相关变量:

unset LD_LIBRARY_PATH
unset CPATH
unset LIBRARY_PATH

之后再执行Conan构建命令(如conan install .、conan build .)。若需要长期隔离,可在启动Conan的脚本中加入上述命令,或在终端配置文件(如.bashrc)中临时注释Anaconda的初始化代码。

2. 强制Conan使用系统标准库

修改Conan配置,强制指定系统的libstdc++和sysroot:

  • 编辑默认profile文件(~/.conan2/profiles/default),添加:
    [conf]
    tools.build:compiler.libcxx=libstdc++11
    tools.build:sysroot=/usr
    
  • 或在项目的conanfile.py中直接配置:
    def configure(self):
        self.conf.define("tools.build:compiler.libcxx", "libstdc++11")
        self.conf.define("tools.build:sysroot", "/usr")
    

这会让Conan在编译和链接阶段优先使用系统/usr下的标准库,而非Anaconda提供的版本。

3. 重新构建pybind11包,使用系统编译器

若现有pybind11包是基于Anaconda编译的,需清除后用系统gcc重新构建:

# 移除已安装的pybind11包
conan remove pybind11/3.0.1 -f
# 用系统gcc重新安装并构建pybind11
conan install pybind11/3.0.1 --build=pybind11 -s compiler=gcc -s compiler.version=13

Ubuntu24.04默认gcc版本为13,其对应的libstdc++已支持GLIBCXX_3.4.31及以上版本。

4. 在编译阶段强制指定系统库路径

在项目的CMakeLists.txt中添加系统库路径优先级配置:

# 优先链接系统标准库路径
link_directories(/usr/lib/x86_64-linux-gnu)
# 强制设置rpath,确保运行时加载系统libstdc++
set(CMAKE_INSTALL_RPATH "/usr/lib/x86_64-linux-gnu")
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)

或通过Conan的构建参数直接传递链接选项:

conan build . -c tools.build:linkflags="-L/usr/lib/x86_64-linux-gnu -Wl,-rpath,/usr/lib/x86_64-linux-gnu"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 01:27:07