Вопросы
Ответы
  HP/Convex SPP-1600

1. Программа d.cc использует заголовочный файл complex.h . Ниже приведен текст программы и Make-файла:

#include ?complex.h
int main(void)
{
return 0;
}

Makefile:
OBJ=d.o
NAME=d.exe
$(NAME):$(OBJ)
  gcc $(OBJ) -o $(NAME)
d.o: d.cc
  gcc -c d.cc

Результат компиляции:
spp 64: make -f d.mak
  gcc -c d.cc
d.cc:3: complex.h: No such file or directory
*** Error exit code 1

Stop.

Файл complex.h имеется в каталоге opt/CC/. Как грамотно его подключать и должен ли это делать каждый пользователь индивидуально в своей конфигурации или это можно сделать для всех централизованно по умолчанию?

Вам следует добавить указание на файл заголовка в опцию компилятора или Ваш Make-file, поскольку стандартный путь к файлам заголовков для компилятора C - /usr/include, а Вы используете каталог от C++. Другая возможность - используйте при работе компилятор C++, называемый CC.

Т.е. используйте любой из вариантов:
cc -I/opt/CC/include/CC d.c
или
gcc -I/opt/CC/include/CC d.c
или
CC d.c

2. Текст программы и Make-файла.
#include <stdio.h>
#include <math.h>
int main(void)
{
printf("Root=%e\n",sqrt(25.));
return 0;
}

Результат компиляции c makefile, подобным вышенаписанным:
spp 69: make -f d.mak
  gcc d.o -o d.exe
/bin/ld: Unsatisfied symbols:
  sqrt (code)
  pow (code)
collect2: ld returned 1 exit status
*** Error exit code 1

Stop.

Здесь math.h вроде бы найден, но требуется еще включение в компиляцию файла libm.a в лоб, чего явно не должно быть. Желание пользоваться еще какими-то "header'ами", по-видимому, вызовет необходимость компиляции еще каких-нибудь файлов библиотек, и пользователю трудно будет догадаться, какими. Хочется чтобы все включалось в пути, а не в Makefile.

Поможет ключ lm, добавленный к строке запуска компилятора или в Make-файл.
3. Что надо сделать, чтобы работать с комплексными переменными в C-программах?

Лучше всего воспользоваться для своих задач компилятором CC( C++), при этом, прежде всего Вы должны настроить переменные PATH и MANPATH.

Добавте в ваш файл следующие строки:
setenv PATH `cat /etc/PATH` : $PATH
setenv MANPATH `cat /etc/MANPATH` : $MANPATH
setenv LPATH /usr/lib:usr/ccs/lib

При компиляции Ваших программ используйте ключ -lm .
Например:
  CC d.c -lm
  a.out

4. Где можно прочитать, как должны быть устроены конфигурационные файлы пользователя для spp.csa.ru.( .login, .profile, .cshrc и т. д.)? Как понимать текст того, что в них написано?

.login выполняется один раз - при входе пользователя в систему.Он написан на языке интерпретатора команд SH.

.profile выполняется, если интерпретатором команд являются: SH, KSH или BASH.

.cshrc - если пользователь работает с csh (C-Shell) или tcsh (рекомендую). В отличие от .login, эти файлы выполняются всякий раз при запуске интерпретатора.

Заготовки всего этого добра, как водится, валяются в каталоге /etc/skel. Узнать свой шелл можно так:
echo $SHELL
или так:
grep ^${USER}: /etc/passwd
и посмотреть последнее поле.

Узнать о них можно из книжек, а также из пособий. Книжки лежат в Политехе в системном отделе, а пособия лежат в Интернете: http://www.csa.ru/~il/sol_dummy

Есть еще один способ: набрать команду
man csh > csh.man ?? ~il/recode -+m csh.man
... после чего распечатать файл "csh.man", переплести и выучить наизусть.

5. Хотелось бы иметь для общего обозрения некие шаблоны конфигурационных скриптов для стандартных задач (fortran и mpi, c++ и mpi , подключение библиотек и т.д.).

1) Добавить в конец .profile
export PATH=/opt/mpi/bin:${PATH}
или в конец .cshrc:
setenv PATH /opt/mpi/bin:${PATH} и перелогиниться.

2) Запуск компилятора для программы на MPI:
Фортран: mpif77 file.f
С: mpicc file.c
С++: mpiCC file.cc

6. Я работаю с фортраном f77 на суперкомпьютере SPP. Какую опцию транслятора следует задавать для того, чтобы инициализировать нулями все локальные переменные в подпрограммах? Я не нашел необходимой опции в описании по фортрану, вызываемому командой man f77 .

К сожалению, я не нашел нужной опции компилятора для SPP 1600. В приложении HP Fortran compatibility в Language reference упоминается опция -nore, позволяющая хранить переменные статически, однако при использовании ее выполняемый модуль не строится. Локальные переменные в подпрограммах являются автоматическими, т.е. при каждом вызове создается их новая копия, а старые значения не сохраняются. Надо явно инициализировать локальные переменные при каждом вызове п/п. Использование оператора save также не позволяет сохранить локальные переменные. Но вообще-то локальные переменные неявно инициализируются нулями.

 

Webmaster

Дата последнего обновления: 15-Apr-2002