2

在使用 SFML 的项目中,我试图通过 make 编译我的队友部分。在他的 ubuntu 上一切正常,但在我的 debian 上一切都出错了。

我将 libsfml 所需的所有包含放在 /usr/local/include/ 文件夹中,并将 libsfml 的所有 .so 放在 /usr/local/lib/ 上

ls -l /usr/local/include : drw-rwSrw- 7 root User size date SFML

我不知道大写的 S 是否是问题的关键,我以前从未见过。在 sudo 上使一切正常。但我不需要成为 root 来编译这样的项目。

有什么建议吗?

这是错误输出:

LibrarySFML.hpp:14:29: error: /usr/local/include/SFML/Graphics.hpp: Permission denied
LibrarySFML.hpp:15:27: error: /usr/local/include/SFML/System.hpp: Permission denied
LibrarySFML.hpp:16:27: error: /usr/local/include/SFML/Window.hpp: Permission denied

LibrarySFML.hpp 第 14-15-16 行:

#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
4

1 回答 1

1

大写S确实说明了问题。从 coreutils ls 信息页面:

如果设置了 set-user-ID 或 set-group-ID 位但未设置相应的可执行位。

这意味着 setgid 位是在目录上设置的(这会强制继承组所有权,在这里没有意义),但可执行位不是。对于目录,这是在目录中查找文件的能力。只有 root 可以看到该目录中的文件,并且只有这样,因为 root 可以忽略它。有人将目录的模式设置为只能用于文件的模式。

chmod 2775 /usr/local/include/SFML

应该解决问题。(或者755,如果您想使用更传统的仅限 root 权限;Debian 正在迁移不再使用该staff组。)

于 2013-03-17T11:06:37.720 回答