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

Manjaro系统编译xnee时cnee段错误导致编译失败如何解决

问题根因

该段错误是由于新版本GCC(10及以上)默认开启-fno-common编译参数导致的,xnee老版本代码中全局变量cnee_options采用了Common段的弱符号声明实现,在新编译规则下无法正确绑定到cnee_options_impl的实际实现地址,导致访问空指针触发段错误。你额外添加的-Wl,--allow-multiple-definition链接参数并不会解决该问题,反而可能干扰符号绑定逻辑。

解决方案

方案1:添加编译参数直接修复(无需改代码)

  1. 首先清理之前的编译缓存,清空自定义编译环境变量:
make distclean
unset LDFLAGS CFLAGS CXXFLAGS
  1. 执行configure时添加-fcommon编译参数:
./configure CFLAGS="-fcommon -O2"
  1. 正常执行编译即可:
make -j$(nproc)

编译完成后可通过sudo make install安装到系统路径。

方案2:代码补丁修复(如果方案1无效)

如果添加编译参数后仍存在段错误,可直接在代码中添加空指针兜底逻辑:

  1. 打开src/cnee/parse.c文件,找到xnee_parse_cnee_option函数
  2. 在函数开头访问cnee_options前添加如下代码:
if (cnee_options == NULL) {
    cnee_options = cnee_options_impl;
}
  1. 重新执行编译即可。

临时绕开方案

如果不需要编译生成文档,可在make报错后直接手动提取编译好的二进制文件:

  • 编译生成的cnee二进制路径为src/cnee/cnee
  • 编译生成的xnee二进制路径为src/libxnee/xnee
    将两个文件手动复制到/usr/local/bin目录即可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:54:08