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

编译Alfa转Solidity转换器时遇CMake权限错误求助

Alfa转Solidity转译器编译权限及antlr4依赖问题解决思路

问题概述

运行Alfa到Solidity智能合约的转译器项目时,执行make生成可执行文件遇到两类问题:

  1. 普通用户执行make时,cmake无法设置/usr/local/include权限,即使将该目录权限设为777仍报错;
  2. 使用sudo make规避权限问题后,出现antlr4-runtime库头文件引用异常的问题。

具体错误信息

权限错误

CMake Error at _deps/googletest-build/googlemock/cmake_install.cmake:46 (file):
  file INSTALL cannot set permissions on "/usr/local/include": Operation not
  permitted.
Call Stack (most recent call first):
  _deps/googletest-build/cmake_install.cmake:47 (include)
  runtime/cmake_install.cmake:47 (include)
  cmake_install.cmake:47 (include)

antlr4依赖错误

使用sudo make后出现antlr4-runtime头文件无法正确引用的问题,表现为编译时头文件找不到或引用路径错误。

解决方案

方案1:指定本地安装路径(推荐)

避开系统目录的权限限制,将所有依赖安装到用户私有目录:

  1. 清理现有build目录:
rm -rf build6
mkdir build6 && cd build6
  1. 配置cmake时指定安装前缀:
cmake -DCMAKE_INSTALL_PREFIX=$HOME/local ..
  1. 执行编译和安装:
make
make install

此方法无需系统权限,且不会干扰系统全局库,同时能避免sudo导致的环境变量不一致问题。

方案2:修复系统目录权限(若需安装到系统目录)

若必须将依赖安装到/usr/local/include,可尝试以下操作:

  1. 检查目录所有者和权限:
ls -ld /usr/local/include
  1. 将目录所有者改为当前用户:
sudo chown -R $USER:$USER /usr/local/include
  1. 检查是否存在文件系统属性限制(如immutable):
lsattr /usr/local/include

若显示i属性,执行sudo chattr -i /usr/local/include移除。
4. 临时关闭SELinux(若系统启用):

sudo setenforce 0

完成编译后可重新开启:sudo setenforce 1。

方案3:解决sudo make导致的antlr4依赖问题

若必须使用sudo,需保留用户环境变量:

sudo -E make

同时确保antlr4-runtime的安装路径在CPATH或CMAKE_INCLUDE_PATH环境变量中,且该变量在sudo环境中被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:03:37