在 Ubuntu 下的 Windows 卷上运行可执行文件

在 Ubuntu 下的 Windows 卷上运行可执行文件

我有一个双启动的 Windows/Ubuntu 系统。我在 Windows 卷上的一个文件夹中有一个由 c++ 文件生成的可执行文件(可在 Ubuntu 上访问),我想在 Ubuntu 上运行它。最直接的答案是将可执行文件移动到 Ubuntu 卷并运行它,但这是一个大型项目的一部分,我在 Ubuntu 中没有足够的空间来移动整个项目。

那么,我可以从 Ubuntu 中的终端运行可执行文件吗?

当我尝试使用命令 ./learn 从终端运行它时,出现错误 ./learn:权限被拒绝。

我甚至尝试使用 sudo,但它不起作用。

答案1

您的文件是为 Windows 编译的吗?是 exe 吗?在这种情况下,复制文件对您没有帮助,因为它使用的是 Windows 系统调用,而不是 Linux 的系统调用。您的文件不在 Ubuntu 分区上这一事实没有区别,即使您将文件复制到 Ubuntu 分区,它也不会起作用。

您可以尝试以下方法:

  • 使用虚拟化层,例如葡萄酒对你来说可能是最简单的方法。这会将软件的 Windows 系统调用转换为与 Linux 系统调用相匹配。Wine 应该可以通过 Canonical 存储库获得,但我不确定。

  • 为 Linux 重新编译你的程序。如果您没有足够的空间将项目从一个分区移动到另一个分区,那么您可能没有空间进行编译。此外,如果您的软件大量依赖 Windows 专用库,那么您必须替换它们,这可能需要一些时间。移植软件可能很复杂。

  • 安装 Windows 虚拟机。这和启动到 Windows 分区大致相同,所以我猜你对这个选项不感兴趣。流行的虚拟化方法包括虚拟盒虚拟机. 我个人使用 VirtualBox。

更多内容:

答案2

权限被拒绝错误是由于文件的所有权和权限引起的,可以通过 chown 和 chmod 命令解决,并给予正确的所有权和正确的权限。但我不认为这会起作用,因为 Windows 上的编译器和 Linux 上的编译器生成的二进制文件是不同的,所以我建议再次在 Linux 上进行编译。

答案3

假设您在 Ubuntu 上编译,并且想要使用 windows 分区作为可执行文件的目标(不是 win32 exe!)。在这种情况下,最简单的解决方案是使用 挂载您的 windows 分区umask=000,dmask=000,fmask=000。这将为所有内容设置 777 权限。但是,如果您想要注意安全性,则不应允许这样做。根据您的用户/组设置,您可以设置例如:022

ntfs 和 vfat 文件系统的权限必须使用dmaskfmaskumask选项进行设置。dmask控制目录的权限、fmask控制文件的权限以及umask控制两者。由于这些选项设置掩码,因此它们应该是您想要的权限的补充。例如,所有者的 rwx 和其他人 rw 是 022,而不是 755。

您可以直接向mount命令提供这些选项:

sudo mount /dev/your_win_partition /media/drive_c -o remount,umask=000,dmask=000,fmask=000

如果您想使其持久,则应将这些选项添加到/etc/fstab。更多信息这里

相关内容