gpt4 book ai didi

c++ - 如何使用 libssh 运行 makefile?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:20 24 4
gpt4 key购买 nike

我对 libssh (libssh.org) 有疑问。我需要在远程服务器上运行一个 makefile。我用命令“channel_request_exec”来完成:

int SSHExecCmd (void(* MessSender)(char* CurMessage, bool IsError, CWnd* MainWnd),ssh_session session,  CString & ShellEcho, char * cmd, CWnd* MainWnd)
{
ssh_channel channel;
int rc;
channel = ssh_channel_new(session);
if (channel == NULL) return SSH_ERROR;
rc = ssh_channel_open_session(channel);
if (rc != SSH_OK)
{
ssh_channel_free(channel);
return rc;
}
rc = ssh_channel_request_exec(channel, cmd);
if (rc != SSH_OK)
{
ssh_channel_close(channel);
ssh_channel_free(channel);
return rc;
}
char buffer[256];
unsigned int nbytes;
nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
while (nbytes > 0)
{
if (fwrite(buffer, 1, nbytes, stdout) != nbytes)
{
ssh_channel_close(channel);
ssh_channel_free(channel);
return SSH_ERROR;
}
nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
}
if (nbytes < 0)
{
ssh_channel_close(channel);
ssh_channel_free(channel);
return SSH_ERROR;
}
return SSH_OK;
}

Makefile 位于根目录中:

all: mpi_cuda.o pattern2d.o
mpicc mpi_cuda.o pattern2d.o -o mpi_cuda -lrt -lpthread -L/opt/cuda/lib64 -lcudart -lm

mpi_cuda.o: mpi_cuda.c
mpicc -g -std=c99 -D_GNU_SOURCE -I/opt/cuda/include -c $< -o $@

pattern2d.o: pattern2d.cu
nvcc -g -c $< -o $@

我发送命令“make”并收到回显:

mpicc -g -std=c99 -D_GNU_SOURCE -I/opt/cuda/include -c mpi_cuda.c -o mpi_cuda.oda

但没有任何反应(未执行编译)。

如果我用腻子制作:一切正常。回声:

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,但可能会出错,因为环境设置不同,因此通过 shell 显式运行 make 可能会有所帮助。

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

bash -c 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),则不会设置这些变量。

如果是这种情况,请将这些 env 变量集移动到 ~/.profile,或在 ~/.bashrc 中,然后再进行上述测试。还可以执行 man bash,并阅读有关初始化文件的内容(例如 ~/.bashrc)。

其他解决方案是使 ssh-session 具有交互性,我相信在 libssh 的这个页面上有记录:http://api.libssh.org/master/libssh_tutor_shell.html .

关于c++ - 如何使用 libssh 运行 makefile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com