从shell脚本运行c脚本

时间:2014-01-31 16:03:54

标签: c++ c shell csh

我有这个shell脚本

#!/bin/csh
@ x = 1
while ($x <= 2)
nohup ./prog1 && ./prog2 &
@ x ++
end

我希望按顺序运行2次prog1和prog2,这些都是先前通过makefile编译的。我该怎么做?脚本是对的吗?

如果我这样做

chmod u+x test.csh
./test.csh

我收到此错误

./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} 

2 个答案:

答案 0 :(得分:2)

标准C ++库的搜索路径在csh中与从命令行运行时的设置不同。

Linking the standard libraries statically应该使库搜索路径无关紧要:更改makefile,如下所示:

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

答案 1 :(得分:1)

如果你真的想做你要求的事,请使用:

#!/bin/csh
./prog1
./prog2
./prog1
./prog2

我觉得你对后台处理等感到困惑。

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

./prog1 && ./prog2

运行prog1,然后运行prog2,无论如何:

./prog1; ./prog2

在后台运行prog1:

./prog1 &

睡8秒然后响铃,但立即回复我的提示:

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