C++ 执行时出错";制造;终端上

C++ 执行时出错";制造;终端上,c++,command-line,terminal,makefile,C++,Command Line,Terminal,Makefile,我是一个有点新手使用终端,所以我会通知它很多,如果你帮我解决这个问题 这个名为mismatch的小文件夹是我下载的代码附带的,应该包含四个参数,如下所示 ./不匹配/不匹配3 1${SFILE} 并计算蛋白质序列的不匹配分数。文件夹“mismatch”包含mismatchManager.cc、makefile和名为“CVS”的文件夹 在makefile中 all: mismatchManager.cc g++ mismatchManager.cc -o ../../bin/

我是一个有点新手使用终端,所以我会通知它很多,如果你帮我解决这个问题

这个名为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的解决方案,因为它告诉我没有名为mistchmanager的文件夹

我还将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

“我没有一个名为mistchmanager的文件夹。”-您的输出文件是
mismatch
是的,它是。我不明白你的意思。你没有一个名为
mistchmanager
的文件夹这一事实是无关紧要的,因为这不是你试图命名输出文件的原因。好的。我只是想在我提到的链接中指出我对给定解决方案的理解。我对
-lm
感到困惑,感谢您的澄清!但是,路径的作用是什么呢?它需要什么?我也尝试了您的建议,只是
-o不匹配
,但遗憾的是没有产生任何结果。
-o
选项的参数告诉编译器或链接器将输出放在何处。如果您说
-o foo
,它将输出写入当前目录,作为名为
foo
的文件。如果您说
-o.././bin/mismatch
,它会将输出写入目录
./../bin
中名为
mismatch
的文件,这意味着向上两级(每个
表示“父目录”),然后是
bin
目录。因此,您当前的目录类似于
/Users/imf/src/some/dir
,然后
。/../bin
将是
/Users/imf/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}中的序列来列出一些相似性分数时。