通过 gcc 编译器用 C 语言编写的 .exe 文件无法执行

通过 gcc 编译器用 C 语言编写的 .exe 文件无法执行

我在台式机上使用 Ubuntu 12.04,在笔记本电脑上使用 Ubuntu 11.04。我正在编写包含数学的 c 程序。我正在通过以下命令创建可执行文件:

gcc -o filename.exe filename.c -lm (compilation)

这将创建一个 filename.exe 文件。我现在可以通过终端命令执行它:

./filename.exe (execution)

我有一台笔记本电脑。它装有 Ubuntu 11.04。我将文件存储在 NTFS 分区中。这些命令序列在我的笔记本电脑上运行良好。但如果我将相同的文件复制到我的台式机的 NTFS 分区(即 Ubuntu 12.04)中,然后运行它,它就不起作用了。它可以编译但不能执行。我得到的答案是:

bash: ./filename.exe: Permission denied

我在网上搜索了一下。他们建议你通过以下命令更改文件的权限:

chmod u+x filename.exe

但我得到的答案相同:Permission denied。我尝试通过 GUI 手动通过属性 --> 权限 --> 选中“允许将文件作为程序执行”,但不起作用。它会自动取消选中。我在互联网上搜索,得到的答案是,不建议每次执行时都更改每个文件的权限。更好的方法是,您可以通过以下命令更改整个 NTFS 分区的权限:

chmod -R 777 /media/partition (where partition is NTFS type.)

这应该会将分区权限更改为 rw 和可执行模式。但这也无法解决我的问题。

答案1

正如其他人已经提到的,该问题是由于使用不支持 Unix 样式权限的 NTFS 引起的。

一种解决方法是挂载分区,使其上的所有文件都设置execute位。这可能会解决您当前的问题,但在编译更复杂的程序时可能会再次出现问题。这也可能是一个安全风险。

一个正确的解决方案是不要使用 NTFS 分区来编译程序:)

答案2

您在挂载 NTFS 分区时可能有一些设置拒绝您在其上执行文件的权限。您应该能够通过编辑 /etc/fstab 中的选项来修复此问题。请参阅此主题:http://ubuntuforums.org/showthread.php?t=1378519

答案3

问题是你使用的 ntfs 没有执行权限。你可以做的一件事是将“exec”添加到 /etc/fstab 文件中此驱动器条目的参数末尾

http://ubuntuforums.org/showthread.php?t=1570369 https://bbs.archlinux.org/viewtopic.php?id=126406

答案4

我解决了这个问题。我按照以下网站操作。

我运行了以下命令:

sudo blkid -c /dev/null (It will list all the partitions we have. In my computer, it displays,)
sudo umount /media/partitionname
sudo mkdir /media/partitionname
sudo mount /dev/sdaX -t ntfs-3g -o uid=1000,gid=1000,umask=002 /media/partitionname

其中,partitionname 是您的 NTFS 分区的名称,在 sdaX 中,X 是从第一个命令获得的数字,即sudo blkid -c /dev/null

现在我可以编写 C 程序,并且可以在同一个分区(在 NTFS 中)中执行。如果没有这些命令,则使用该命令时文件颜色为白色ls -al。但现在通过命令列出文件后,颜色已变为绿色ls -al

相关内容