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

C嵌入Anaconda Python3.9运行提示找不到libpython3.9.so.1.0

问题描述
  • 编写了调用Python逻辑的C脚本,大部分功能调试正常,运行编译生成的可执行文件时报错:
~/Documents/code/test: error while loading shared libraries: libpython3.9.so.1.0: cannot open shared object file: No such file or directory
[1] + Done                       "/usr/bin/gdb" --interpreter=mi --tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-cdpcz1c5.vwd" 1>"/tmp/Microsoft-MIEngine-Out-j5b1thxt.2vz"
  • 开发环境为VS Code,使用的tasks.json配置如下:
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc build active file",
            "command": "/usr/bin/gcc",
            "args": [
                "-fdiagnostics-color=always",
                "-I${workspaceFolder}",
                "-I/usr/include/glib-2.0",
                "-I/usr/lib/x86_64-linux-gnu/glib-2.0/include",
                "-I${HOME}/anaconda3/envs/metagenomics/include",
                "-I${HOME}/anaconda3/envs/metagenomics/include/python3.9",
                "-I${HOME}/anaconda3/envs/metagenomics/lib/python3.9/site-packages/numpy/core/include/numpy",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-L${HOME}/anaconda3/envs/metagenomics/lib",
                "-L${HOME}/anaconda3/envs/metagenomics/lib/python3.9",
                "-L${HOME}/anaconda3/envs/metagenomics/lib/python3.9/config-3.9-x86_64-linux-gnu",
                "-lpython3.9"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
"version": "2.0.0"
}
  • 实际执行的构建命令如下,构建可成功完成:
Starting build...
/usr/bin/gcc -fdiagnostics-color=always -I${HOME}/Documents/code -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I${HOME}/anaconda3/envs/myenv/include -I${HOME}/anaconda3/envs/myenv/include/python3.9 -I${HOME}/anaconda3/envs/myenv/lib/python3.9/site-packages/numpy/core/include/numpy -g ${HOME}/Documents/code/test.c -o ${HOME}/Documents/code/test -L${HOME}/anaconda3/envs/myenv/lib -L${HOME}/anaconda3/envs/myenv/lib/python3.9 -L${HOME}/anaconda3/envs/myenv/lib/python3.9/config-3.9-x86_64-linux-gnu -lpython3.9

Build finished successfully.
  • 已确认的排查信息:
    • 使用Anaconda作为环境管理器,编译参数中已添加${HOME}/anaconda3/envs/myenv/lib等库搜索路径
    • 执行find ~/anaconda3/envs/myenv/ -name libpython3.9.so.*可确认对应路径下存在libpython3.9.so.1.0文件
    • 文件权限为-rwxrwxr-x,不存在权限不足问题
    • 参考过通用同类问题方案,未适配当前场景
故障原因

和权限无关。编译时添加的-L参数仅在编译链接阶段生效,不会把库搜索路径写入最终生成的可执行文件,程序运行时的动态链接器默认不会扫描Anaconda虚拟环境下的lib目录,自然无法定位到libpython3.9.so.1.0。

另外配置存在路径不一致问题:tasks.json中写的头文件、库路径指向metagenomics环境,实际执行的构建命令用的是myenv环境,后续容易出现版本不匹配问题,需要统一。

解决方案

任选以下一种方案即可:

方案1:编译时写入rpath(推荐,不依赖终端环境配置)

修改tasks.json的gcc参数,在链接参数中添加-Wl,-rpath,${HOME}/anaconda3/envs/myenv/lib,把库的绝对搜索路径直接写入可执行文件,运行时动态链接器会优先到该路径查找依赖。
修改后的链接部分参数参考:

"args": [
    // 其余原有参数保留,注意统一所有路径到同一个conda环境
    "-L${HOME}/anaconda3/envs/myenv/lib",
    "-L${HOME}/anaconda3/envs/myenv/lib/python3.9",
    "-L${HOME}/anaconda3/envs/myenv/lib/python3.9/config-3.9-x86_64-linux-gnu",
    "-Wl,-rpath,${HOME}/anaconda3/envs/myenv/lib",
    "-lpython3.9"
]

重新编译后即可正常运行。

方案2:运行前临时指定动态库路径

执行程序前在当前终端输入以下命令,把Anaconda环境的lib路径加入动态链接器搜索路径:

export LD_LIBRARY_PATH=~/anaconda3/envs/myenv/lib:$LD_LIBRARY_PATH

再执行编译好的二进制文件即可。该配置仅对当前终端会话生效,新开终端需要重新执行。

方案3:激活对应Anaconda环境后再运行

Anaconda激活虚拟环境时会自动把当前环境的lib路径加入LD_LIBRARY_PATH,先执行conda activate myenv激活编译时使用的虚拟环境,再运行程序即可正常加载依赖库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:36:18