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

修改Python3.8.10源码后编译报错Makefile:617: sharedmods Error 139求助

问题根因与修复方案

核心错误原因

  • 参数传递错误:PyUnicode_Append 函数的入参是二级指针 PyObject **p_left,你在调用自定义的PyUnicode_Append_Handler时误用了未定义的变量left,实际传入的是野指针,访问该指针直接触发段错误,你遇到的退出码139就是Linux下段错误的标准返回值。
  • 缺少合法性校验:没有校验right是否为合法Unicode对象,也没有检查PyUnicode_AsUTF8的返回值是否为空,遇到异常场景会直接崩溃。
  • 路径权限风险:如果/home/pyiast/目录不存在或者当前运行编译的用户没有该目录的写权限,虽然不会直接崩溃但会导致日志无法写入。

修复后的代码示例

void
PyUnicode_Append_Handler(PyObject *left, PyObject *right)
{
    // 先校验两个参数都是合法Unicode对象
    if (!PyUnicode_Check(left) || !PyUnicode_Check(right)) {
        return;
    }
    FILE* fp = fopen("/home/pyiast/append.log","a+");
    if (NULL == fp){
        return;
    }
    const char *left_str = PyUnicode_AsUTF8(left);
    const char *right_str = PyUnicode_AsUTF8(right);
    // 校验UTF8转换结果非空
    if (left_str == NULL || right_str == NULL) {
        fclose(fp);
        return;
    }
    PyObject *data = PyUnicode_FromFormat("append:dst=%s, src=%s\n", left_str, right_str);
    if (data != NULL){
        PyObject_Print(data, fp, 0);
        Py_DECREF(data);
    }
    fclose(fp);
}

void
PyUnicode_Append(PyObject **p_left, PyObject *right)
{
    //... other code
    assert(_PyUnicode_CheckConsistency(*p_left, 1));
    
    // 修正参数:传入解引用后的*p_left
    PyUnicode_Append_Handler(*p_left, right);
}

额外注意事项

  • 编译前先确保/home/pyiast/目录存在,且执行make的用户对该目录有读写权限
  • 修复完成后先执行make clean清理之前的编译缓存,再重新执行make编译,避免旧的目标文件影响结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:39:05