3

我在 buildbot slave 中运行了一个虚拟编译。与 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 用户

命令运行只是 cmake 。操作系统为 ubuntu 12.04.1 LTS 服务器版

谢谢

4

1 回答 1

2

当 CMake 检查是否gcc有效时,它会创建一个临时文件并尝试编译它。以我的经验,这总是在本地CMakeFiles文件目录中完成。看起来由于某种原因它正在尝试在其中执行此操作/usr/local/include(它至少正在尝试在该文件夹中执行某些操作,因此是cc1: error: /usr/local/include/x86_64-linux-gnu: Permission denied)。

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

你有三个选择。

  1. 深入研究 CMake 在尝试访问此文件时所做的事情,并将其更改为在您拥有的位置执行它正在做的事情。
  2. 更改 to 的权限,/usr/local/include以便每个人都可以写入/usr/local/include
  3. 创建一个 buildbot 所属的新组,并将组所有权更改为该组/usr/local/include。确保将权限更改为 770。

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

于 2013-05-14T17:40:05.490 回答