Запустите c scrips из сценария оболочки

У меня есть этот скрипт

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

Я хочу запустить последовательно 2 раза prog1 и prog2, которые предварительно скомпилированы через make-файл. Как мне это сделать? Правильный ли сценарий?

Если я сделаю

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}

1

Решение

Похоже, что путь поиска для стандартной библиотеки C ++ задается по-разному в csh и при запуске из командной строки.

Статическое связывание стандартных библиотек должен сделать путь поиска библиотеки неактуальным: измените ваш make-файл следующим образом:

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

Другие решения

Если вы действительно хотите сделать то, что вы просите, используйте это:

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

Я чувствую, что вы сбиты с толку фоновым процессом и тому подобным.

Запустите prog1, затем prog2, если prog1 успешно завершится:

./prog1 && ./prog2

Запустите prog1, а затем prog2 независимо от:

./prog1; ./prog2

Запустите prog1 в фоновом режиме:

./prog1 &

Спи 8 секунд, затем позвони, но немедленно ответь мне:

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector