我是使用Terminal的新手,所以如果您能帮助我解决这个问题,我会非常感谢。

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


  ./mismatch/mismatch 3 1 $ {SFILE}


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

在makefile中,

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


快速搜索后,我发现当您想命名您的.exe文件时使用-o,而-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。这次我可以传递参数,但是没有产生任何结果。我不知道该怎么办。

已经谢谢你了!

最佳答案

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

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

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

顺便说一句,您的语句-lm用于将可执行文件链接到我认为此处是“ bin”不正确的库。 -lm正在要求链接器链接到m或数学库中。 bin不是一个库,它是一个目录(或某些人称为“文件夹”),并且与参数-lm无关。

关于c++ - 在终端上执行“make”时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22944752/

10-11 11:51