C++ 执行时出错";制造;终端上
我是一个有点新手使用终端,所以我会通知它很多,如果你帮我解决这个问题 这个名为mismatch的小文件夹是我下载的代码附带的,应该包含四个参数,如下所示 ./不匹配/不匹配3 1${SFILE} 并计算蛋白质序列的不匹配分数。文件夹“mismatch”包含mismatchManager.cc、makefile和名为“CVS”的文件夹 在makefile中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/
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}中的序列来列出一些相似性分数时。