【问题标题】:error while executing "make" on terminal在终端上执行“make”时出错
【发布时间】:2014-05-21 14:30:43
【问题描述】:

我对使用终端有点新手,所以如果你能帮我解决这个问题,我会非常感激。

这个名为 mismatch 的小文件夹是我下载的代码附带的,它应该有四个这样的参数

./mismatch/mismatch 3 1 ${SFILE}

并计算蛋白质序列的错配分数。文件夹“mismatch”包含 mismatchManager.cc、makefile 和一个名为“CVS”的文件夹。

在makefile中,

all:  mismatchManager.cc    
      g++ mismatchManager.cc -o ../../bin/mismatch -lm

经过快速搜索,我发现 -o 用于命名 .exe 文件,而 -lm 用于将可执行文件链接到我认为是“bin”的库。所以当我从终端运行“make”命令时,它给出了以下错误。

ld: can't open output file for writing: ../../bin/mismatch, errno=2
collect2: ld returned 1 exit status

我认为“bin”目录可能是存储可执行文件的 /usr/local/bin,所以我将上面的路径替换为这个路径,但是它给出了同样的错误。这里有一个 ErrNo=21 Why does the name of a source file affect compilation? 的解决方案,因为据说我没有名为 mismatchManager 的文件夹。

我也把make文件改成了

all:  mismatchManager.cc    
      g++ -o mismatch mismatchManager.cc 

然后运行“make”命令。它运行良好,然后我手动将 mismatch.exe 复制到 /usr/local/bin 。这次我能够传递参数,但没有产生任何结果。我不知道该怎么办。

已经谢谢了!

【问题讨论】:

  • "我没有名为 mismatchManager 的文件夹。" - 你的输出文件是mismatch
  • 是的。我不明白你的意思。
  • 您没有名为 mismatchManager 的文件夹这一事实无关紧要,因为这不是您要命名的输出文件。
  • 好的。我只是想在我提到的链接中说明我对给定解决方案的理解。

标签: c++ command-line terminal makefile


【解决方案1】:

不错的链接器。甚至无法为您解释错误代码?瘸。无论如何,errno=2 是“访问冲突”,这意味着您没有写入或创建文件../../bin/mismatch 的权限。

我不能说为什么会这样,因为我不知道您的系统上的 ../../bin 是什么,但肯定将其更改为 /usr/local/bin 将无济于事,因为您可能没有写入权限目录。

您可以尝试将其更改为-o mismatch,这将在当前目录中写出一个名为mismatch 的文件,您很可能拥有该文件的写入权限。

顺便说一句,您的声明 -lm 用于将可执行文件链接到我认为这里是“bin”的库是不正确的。 -lm 要求链接器链接到 m 或数学库中。 bin 不是一个库,它是一个目录(或者有些人称它们为“文件夹”),它与 -lm 的论点无关。

【讨论】:

  • 我对@9​​87654331@ 感到困惑,谢谢您的澄清!但是,路径 ../../bin/mismatch 的作用是什么?它有什么要求?我也尝试了你的建议,只是-o mismatch,但遗憾的是它没有产生任何结果。
  • -o 选项的参数告诉编译器或链接器将输出放在哪里。如果你说-o foo,它会将输出写入当前目录,作为一个名为foo 的文件。如果您说-o ../../bin/mismatch,它会将输出写入../../bin 目录中名为mismatch 的文件,这意味着向上两级(每个.. 表示“父目录”),然后是bin 目录。因此,您的当前目录类似于/Users/myself/src/some/dir,然后../../bin 将是/Users/myself/src/bin(两个目录向上,然后是bin)。运行pwd 以查看您当前的目录路径。
  • 我不知道你说的没有产生任何结果是什么意思。它必须做点什么;它要么生成文件,要么生成错误。如果你运行ls mismatch,你会看到什么?
  • 非常感谢!现在它更有意义了。问题是目录中没有“bin”文件夹,所以我创建了一个。之后,“make”命令效果很好!然而,他们建议通过./mismatch/mismatch 3 1 ${SFILE} 的参数再次出错,称mismatch 是一个有意义的目录,而且他们也没有在他们的路径中提到'bin'!这也太折磨人了。。
  • 当我运行ls mismatch 时,它会打印出mismatch,当我通过./mismatch/mismatch 3 1 ${SFILE} 时,它会再次打印mismatch,它应该通过比较${FILE 中的序列来列出一些相似性分数}.
猜你喜欢
  • 2019-09-15
  • 2011-01-30
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多