即使文件存在,“ bash:没有这样的文件或目录”

Aaron Kang |

我对Ubuntu相当陌生,最近,我通过在终端中键入来创建.o文件:

g++ -Wall -std=c++11 -c average.cpp -o average.o

但是,当我尝试执行.o文件时,出现此错误:

bash: ./average: No such file or directory

即使我显然有文件。因此,我决定输入file average.o,这让我明白了:ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

问题是否在于它必须是32位可执行文件?如果是的话,如何将其更改为32位可执行文件?

编辑:这样我就可以创建average,但是当我尝试运行它时,会出现以下错误:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_M_construct null not valid
Aborted (core dumped)

编辑2:我能够修复核心转储并设法为我的文件提供运行权限,但是现在,我遇到了一个新错误:

bash: ./average: cannot execute binary file: Exec format error

当我这样做的时候file averge,我得到了:

average: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

里卡多·罗德里格斯(Ricardo Rodrigues)

.o 文件不是可执行文件。

请尝试以下方法之一:

  • 跳过.o文件的创建并创建可执行文件

    g++ -Wall -std=c++11 average.cpp -o average
    ./average
    
  • .o文件链接到可执行文件

    g++ -Wall -std=c++11 -c average.cpp -o average.o
    g++ -Wall -std=c++11 -o average average.o
    ./average
    

如果该average文件仍然无法运行,请尝试授予其权限

chmod +x average

编辑(07/03/17)

解释

我被要求解释命令的作用,所以就到这里了。

g ++

这是编译器,它将解释您的代码并将其转换为机器可以解释的机器代码。

您可以在手册页上阅读有关它的更多信息。只需打开终端并输入即可man g++

-墙

该标志告诉编译器告诉您几乎所有警告(Wall =全部警告)。看一下下面的代码。

int i = 1;
if (i > i) { ... }

如果您不放置该标志,则-Wall不会显示警告,但是如果您看到该标志,则会显示以下内容:

warning: self-comparison always evaluates to false [-Wtautological-compare]
    if (i > i) {}

-std = c ++ 11

使用此标志,您可以告诉编译器要使用哪种版本的语言。这是一个非常复杂的主题,但是简而言之,C ++是一种生动的语言,这意味着它会随着时间的推移而变化并有所改进,C ++ 11是其中的一种变化,并且增加了很多改进现在您可以使用-std=c++14,今年某个时候您可以使用-std=c++17

您似乎对C ++陌生,所以不必担心所有此版本的事情!:D

-C

无需链接即可编译。

基本上允许创建.o文件(也称为目标文件),这些文件包含一堆数据(主要是已编译的代码)和供编译器链接对象的信息。

它使大型项目的编译更快,因为当您更改一个文件时,只需要创建一个目标文件并将其链接到已编译的目标文件即可。

-o文件

man页面中获取:

将输出放置在文件文件中。这适用于所产生的任何类型的输出,无论是可执行文件,目标文件,汇编文件还是预处理的C代码。

基本上,此标志告诉编译器将其正在执行的任何过程的结果放在何处(编译/链接/ ...)。


希望这个解释有所帮助!:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash:没有这样的文件或目录?

来自分类Dev

bash:没有这样的文件或目录

来自分类Dev

bash:没有这样的文件或目录

来自分类Dev

Bash-没有这样的文件或目录,即使目录存在并且先前的命令可以正确运行

来自分类Dev

bash scp没有这样的文件或目录

来自分类Dev

touch:.bash_profile:没有这样的文件或目录

来自分类Dev

-bash:sudo:没有这样的文件或目录

来自分类Dev

bash while循环:没有这样的文件或目录

来自分类Dev

解释“ -bash:没有这样的文件或目录”

来自分类Dev

bash脚本源:没有这样的文件或目录

来自分类Dev

bash:/ usr / bin / ruby:没有这样的文件或目录

来自分类Dev

Bash没有这样的文件或目录错误

来自分类Dev

bash:./idaq:没有这样的文件或目录

来自分类Dev

-bash ./foo:编译后没有这样的文件或目录

来自分类Dev

bash脚本源:没有这样的文件或目录

来自分类Dev

#!/ bin / bash-没有这样的文件或目录

来自分类Dev

解释“ -bash:没有这样的文件或目录”

来自分类Dev

#!/ bin / bash:没有这样的文件或目录

来自分类Dev

bash:./configure:没有这样的文件或目录

来自分类Dev

bash:config.sh:没有这样的文件或目录

来自分类Dev

Bash-:没有这样的文件或目录

来自分类Dev

touch:.bash_profile:没有这样的文件或目录

来自分类Dev

Bash没有这样的文件或目录错误

来自分类Dev

bash:./idaq:没有这样的文件或目录

来自分类Dev

-bash:./configure:没有这样的文件或目录

来自分类Dev

-bash:/ usr / sbin / mail:没有这样的文件或目录

来自分类Dev

bash while循环:没有这样的文件或目录

来自分类Dev

bash:cd:<path>:没有这样的文件或目录

来自分类Dev

“ -bash:{}:没有这样的文件或目录”,使用find exec

Related 相关文章

  1. 1

    Bash:没有这样的文件或目录?

  2. 2

    bash:没有这样的文件或目录

  3. 3

    bash:没有这样的文件或目录

  4. 4

    Bash-没有这样的文件或目录,即使目录存在并且先前的命令可以正确运行

  5. 5

    bash scp没有这样的文件或目录

  6. 6

    touch:.bash_profile:没有这样的文件或目录

  7. 7

    -bash:sudo:没有这样的文件或目录

  8. 8

    bash while循环:没有这样的文件或目录

  9. 9

    解释“ -bash:没有这样的文件或目录”

  10. 10

    bash脚本源:没有这样的文件或目录

  11. 11

    bash:/ usr / bin / ruby:没有这样的文件或目录

  12. 12

    Bash没有这样的文件或目录错误

  13. 13

    bash:./idaq:没有这样的文件或目录

  14. 14

    -bash ./foo:编译后没有这样的文件或目录

  15. 15

    bash脚本源:没有这样的文件或目录

  16. 16

    #!/ bin / bash-没有这样的文件或目录

  17. 17

    解释“ -bash:没有这样的文件或目录”

  18. 18

    #!/ bin / bash:没有这样的文件或目录

  19. 19

    bash:./configure:没有这样的文件或目录

  20. 20

    bash:config.sh:没有这样的文件或目录

  21. 21

    Bash-:没有这样的文件或目录

  22. 22

    touch:.bash_profile:没有这样的文件或目录

  23. 23

    Bash没有这样的文件或目录错误

  24. 24

    bash:./idaq:没有这样的文件或目录

  25. 25

    -bash:./configure:没有这样的文件或目录

  26. 26

    -bash:/ usr / sbin / mail:没有这样的文件或目录

  27. 27

    bash while循环:没有这样的文件或目录

  28. 28

    bash:cd:<path>:没有这样的文件或目录

  29. 29

    “ -bash:{}:没有这样的文件或目录”,使用find exec

热门标签

归档