我是使用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/