在终端上执行“make”时出错

时间:2014-04-08 17:59:37

标签: c++ command-line terminal makefile

我使用终端时有点新手,所以如果你帮我解决这个问题,我会说很多。

这个名为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。这次我能够传递参数,但我没有产生任何结果。我不知道该怎么做。

谢谢!

1 个答案:

答案 0 :(得分:1)

好的链接器。甚至无法为您解释错误代码?瘸。无论如何,errno=2是"访问违规",这意味着您无权写入或创建文件../../bin/mismatch

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

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

BTW,您的语句 -lm用于将可执行文件链接到我认为是" bin"这里不正确。 -lm要求链接器链接到m或数学库。 bin不是一个库,它是一个目录(或者某些人称之为"文件夹"),它与参数-lm无关。