C++ 从shell脚本运行c脚本

C++ 从shell脚本运行c脚本,c++,c,shell,csh,C++,C,Shell,Csh,我有这个shell脚本 #!/bin/csh @ x = 1 while ($x <= 2) nohup ./prog1 && ./prog2 & @ x ++ end 我得到这个错误 ./prog1: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./prog1) 这是我的makefile GSLFLAGS := `pkg-config --cflags g

我有这个shell脚本

#!/bin/csh
@ x = 1
while ($x <= 2)
nohup ./prog1 && ./prog2 &
@ x ++
end
我得到这个错误

./prog1: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./prog1)
这是我的makefile

GSLFLAGS := `pkg-config --cflags gsl`  
LIBGSL := `pkg-config --libs gsl`
CFLAGS = -O3 -fopenmp
LIBOMP = -lgomp

dist.o:dist.cxx
    g++ -Wall -c dist.cxx

prog1.o:prog1.cxx
    g++ -Wall -c prog1.cxx  $< ${GSLFLAGS} ${CFLAGS}

prog1:prog1.o dist.o 
    g++ ${CFLAGS} -o  $@ $^ ${LIBGSL} 

prog2.o:prog2.cxx
    g++ -Wall -c prog2.cxx  $< ${GSLFLAGS} ${CFLAGS}

prog2:prog2.o dist.o 
    g++ ${CFLAGS} -o  $@ $^ ${LIBGSL} 
GSLFLAGS:=`pkg-config--cflags-gsl`
LIBGSL:=`pkg config--libs gsl`
CFLAGS=-O3-fopenmp
LIBOMP=-lgomp
dist.o:dist.cxx
g++-Wall-c dist.cxx
prog1.o:prog1.cxx
g++-Wall-c prog1.cxx$<${GSLFLAGS}${CFLAGS}
prog1:prog1.o dist.o
g++${CFLAGS}-o$@$^${LIBGSL}
prog2.o:prog2.cxx
g++-Wall-c prog2.cxx$<${GSLFLAGS}${CFLAGS}
prog2:prog2.o dist.o
g++${CFLAGS}-o$@$^${LIBGSL}

> > P>,标准C++库的搜索路径在CSH VS中设置不同,当您从命令行运行时,

应使库搜索路径不相关:按如下方式更改makefile:

CFLAGS = -O3 -fopenmp -static-libgcc -static-libstdc++

如果你真的想按你的要求做,请使用以下方法:

#!/bin/csh
./prog1
./prog2
./prog1
./prog2
我感觉你被背景处理之类的事情弄糊涂了

如果prog1成功退出,则运行prog1,然后运行prog2:

./prog1 && ./prog2
运行prog1,然后运行prog2,无论:

./prog1; ./prog2
在后台运行prog1:

./prog1 &
睡眠8秒钟,然后按铃,但立即给我回复提示:

(sleep 3; sleep 5;echo $'\a') &

从shell运行
/prog1
时会得到什么?它工作正常,这是普通shell的奇怪部分
/bin/csh
?另外,从命令行运行
nohup./prog1
也可以吗?是的,nohup./prog1也可以。我建议您在普通shell中运行“set | grep-i LIB”,然后将相同的命令放在上面脚本的第二行。然后查看差异,看看在脚本中运行时缺少什么,然后更正脚本的库搜索路径。但是while是如何工作的呢?在我看来,它在并行运行prog1和prog2两次,而不是prog1 prog2 prog1prog2@user3036416这不是你想要的效果吗?您的脚本告诉nohup将程序放在后台,因为您在末尾放了一个符号
&
。如果您希望按顺序运行它们,请删除符号AND。更好的是,“展开”循环(即,按照另一个答案的建议,一个接一个地“拼写”它的动作),因为你的循环非常短。我在最后删除了-,现在一切都好了!谢谢,请注意,哦,这是一种膏药。问题实际上是,两个shell中的库搜索路径不同。如果像这里建议的那样静态链接,二进制文件将更大,因为它将包含二进制文件之间通常共享的所有库代码,因此加载和消耗系统资源的时间将更长。静态链接也有其他缺点,所以请考虑你是否真的想这么做。如果我有很多迭代,你会怎么说?你说你有两个。
(sleep 3; sleep 5;echo $'\a') &