我用这个命令构建了一个库:
$ ../configure '--host=x86_64-w64-mingw32' --prefix=/usr/x86_64-w64-mingw32/sys-root/mingw && make && make install
安装失败,因为显然没有在 mingw sysroot 中创建文件的权限:
$ mkdir /usr/x86_64-w64-mingw32/sys-root/mingw/share/whatever
mkdir: cannot create directory
‘/usr/x86_64-w64-mingw32/sys-root/mingw/share/whatever’: Permission
denied
有什么问题以及如何以最直接的方式解决它?
答案1
sudo
Cygwin 中没有。其他来源建议使用
cygstart --action=runas command args
这很有帮助,但在我的情况下没有,make install
行为不稳定,因为目录没有传递到启动的进程(这是问题cygstart
)加上它在单独的 CMD 窗口而不是mintty
.最通用的解决方案是使用升级权限本身启动 Cygwin shell(您只能通过这种方式重定向升级命令的输出):
cygstart --action=runas mintty -
但您仍然需要导航回要执行命令的目录。
我还发现-d
switchcygstart
使命令变得更糟:
#su analog
cygstart --action=runas -d "$(pwd)" mintty -
#sudo analog
cygstart --action=runas -d "$(pwd)" mintty command args
这可能是最好的解决方案,但 mintty 不会在没有单独开关的情况下传递目录,并且不会将工作目录传递给 shell ( mintty -
)。
所以最终版本sudo
是:
#new mintty window
cygstart --action=runas mintty -dir "$(pwd)" command args
#new CMD window
cygstart --action=runas -d "$(pwd)" command args
我找不到在任意工作目录中启动 shell 的好方法。
答案2
不要只是以 root 身份运行:su
, sudo
, runas
,它会工作,但会为将来留下问题(这些文件/目录受到保护是有原因的)。
有一个地方供您安装自己的程序。
/usr/local
将其放在那里可以更轻松地升级系统,而不会丢失程序。
更好的是,还可以使用stow
.它将让您的程序与其他程序分开,并使用系统链接对其进行修补。它将跟踪想法,以便轻松删除或升级。