C++ 如何使用libssh运行makefile?

C++ 如何使用libssh运行makefile?,c++,makefile,libssh,C++,Makefile,Libssh,我对libssh(libssh.org)有问题。我需要在远程服务器上运行makefile。我使用命令“channel\u request\u exec”执行此操作: 但什么也没发生(不执行编译) 如果我用油灰做的话,一切都会好的。回声: make mpicc -g -std=c99 -D_GNU_SOURCE -I/opt/cuda/include -c mpi_cuda.c -o mpi_cuda.o mpi_cuda.c: В функции ‘main’: mpi_cuda.c:148:

我对libssh(libssh.org)有问题。我需要在远程服务器上运行makefile。我使用命令“channel\u request\u exec”执行此操作:

但什么也没发生(不执行编译)

如果我用油灰做的话,一切都会好的。回声:

make
mpicc -g -std=c99 -D_GNU_SOURCE -I/opt/cuda/include -c mpi_cuda.c -o mpi_cuda.o
mpi_cuda.c: В функции ‘main’:
mpi_cuda.c:148: предупреждение: недостаточно аргументов для указанного формата
nvcc -g -c pattern2d.cu -o pattern2d.o
mpicc mpi_cuda.o pattern2d.o -o mpi_cuda -lrt -lpthread -L/opt/cuda/lib64 -lcudart -lm

如何解决这个问题?

不熟悉libssh,但错误可能是,因为环境设置不同,所以显式运行make-through-shell可能会有所帮助

尝试将命令(
make
?)更改为

如果不起作用,试试看

bash -c "export > env.txt ; make > make_out.txt 2> make_err.txt"
然后检查这些文件是否出现,以及它们所包含的内容,这将提供良好的提示

如果您有一个工作案例和一个非工作案例,那么从这两个案例中获取这些文件,并将它们进行比较(例如使用
diff-u

并将
bash
更改为您使用的任何shell(在这种情况下,请检查
-c
是否是给出命令字符串的正确开关,以及
export
是否是显示环境的正确命令),如果您未使用bash


根据下面的评论:env.txt中的差异可能是,因为一些环境变量仅为交互式shell设置。例如,在我的Ubuntu框中,.bashrc的开头有如下行:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return
现在,如果在该行之后的.bashrc中设置了任何所需的环境变量,并且您的ssh连接是非交互的(没有伪tty),则不会设置这些变量

如果是这种情况,在进行上述测试之前,将这些环境变量集移动到
~/.profile
,或移动到
~/.bashrc
。还要做
manbash
,阅读初始化文件的相关内容(比如
~/.bashrc


另一个解决方案是使ssh会话具有交互性,我相信这在libssh的本页中有记录:。

我建议打开一个非交互性shell并在那里执行。看


我在两台服务器上测试了日志记录选项(bash-c“make>make\u out.txt 2>make\u err.txt”)。第一个make_err.txt:make:mpicc:Command not found make:**[all]错误127第二个:make:nvcc:Command not found make:**[pattern2d.o]错误127通过尝试和错误我收到了仅在一台服务器上工作的错误代码。使用异步读取(ssh\u通道\u读取\u非阻塞)。但为什么mpicc在这种情况下可用?这很奇怪…@snk更新了答案,将环境也转储到env.txt,以及关于比较工作和非工作输出(特别是env.txt)的说明。很抱歉延迟。当您连接libssh env.txt时,它由12个变量组成。用油灰34。问题在这里,但为什么不清楚。你读过这一页吗?最重要的是,阅读有关交互式和非交互式shell的内容。(注意:我并没有读那个页面,我只是在谷歌上搜索了一下才找到它;)。添加了一些东西来回答。。。(此外,由于你是SO新手:你应该投票选出所有你认为有用的答案,然后一旦你对答案感到满意,记得接受你最喜欢或认为正确的答案)。
make
mpicc -g -std=c99 -D_GNU_SOURCE -I/opt/cuda/include -c mpi_cuda.c -o mpi_cuda.o
mpi_cuda.c: В функции ‘main’:
mpi_cuda.c:148: предупреждение: недостаточно аргументов для указанного формата
nvcc -g -c pattern2d.cu -o pattern2d.o
mpicc mpi_cuda.o pattern2d.o -o mpi_cuda -lrt -lpthread -L/opt/cuda/lib64 -lcudart -lm
bash -c make
bash -c "export > env.txt ; make > make_out.txt 2> make_err.txt"
# If not running interactively, don't do anything
[ -z "$PS1" ] && return