Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu cmake为root用户而非其他用户工作_Ubuntu_Cmake - Fatal编程技术网

Ubuntu cmake为root用户而非其他用户工作

Ubuntu cmake为root用户而非其他用户工作,ubuntu,cmake,Ubuntu,Cmake,我有一个在buildbot从机中运行的虚拟编译。 使用buildbot用户运行时,我得到: -- The C compiler identification is unknown -- The CXX compiler identification is unknown -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- broken CMake Error

我有一个在buildbot从机中运行的虚拟编译。 使用buildbot用户运行时,我得到:

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- broken
CMake Error at /usr/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):
  The C compiler "/usr/bin/gcc" is not able to compile a simple test program.
...
cc1: error: /usr/local/include/x86_64-linux-gnu: Permission denied
/usr/local/include/x86_64-linux-gnu不存在,但如果我以su的形式手动运行它,我会得到:

-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
以此类推,我可以在以后生成并运行生成的可执行文件 我假设与项目文件权限无关,因为所有文件都属于buildbot用户

命令运行只是一个简单的过程。 操作系统是ubuntu 12.04.1 LTS服务器版


谢谢

当CMake检查
gcc
是否工作时,它会创建一个临时文件并尝试编译它。根据我的经验,这总是在本地
cmakfiles
files目录中完成的。出于某种原因,它似乎正在尝试在
/usr/local/include
中执行此操作(它至少正在尝试在该文件夹中执行某些操作,因此出现
cc1:error:/usr/local/include/x86\u 64-linux-gnu:权限被拒绝

问题是,正如您所指出的,只有root有权读取或写入该文件夹。这对我来说似乎有点奇怪,因为至少应该允许其他人在那里阅读。无论如何,您的buildbot没有访问权限,因此配置失败

你有三个选择

  • 深入了解CMake在尝试访问此文件时正在执行的操作,并将其更改为在您自己的位置执行的操作
  • /usr/local/include
    的权限更改为,以便每个人都可以向
    /usr/local/include
  • 创建buildbot所属的新组,并将
    /usr/local/include
    的组所有权更改为该组。确保将权限更改为770

  • 就个人而言,我会尝试做第一件事,因为我更喜欢在本地做事情,而不是在我的系统内部。
    cmakfiles
    目录中有一些日志文件,您可以查看。

    /usr/local/include的权限是什么,谁拥有它?drwx------3 root root 4096 May 9 08:45 includeOk,将读取和执行权限添加到/usr/local/include修复了此问题,谢谢!