Пример PETSc не работает

У меня ОС Windows 7. Я следовал инструкциям на веб-странице PETSc; В командной строке VS 2005 я открыл Cygwin и установил PETSc с командой:

./configure --with-cc='win32fe cl' --with-fc=0 --with-mpi=0 --download-f2cblaslapack

Я попытался запустить следующий пример с веб-страницы:

cd src/ksp/ksp/examples/tutorials

make ex2

ex2.c - это код программы переменного тока. Я получаю следующую ошибку:

$ make ex2

makefile:18: /conf/variables: No such file or directory

makefile:19: /conf/rules: No such file or directory

makefile:1151: /conf/test: No such file or directory

make: *** No rule to make target `/conf/test'.  Stop.

Чем это вызвано?

(и что более важно) Как это исправить?

* edit: я мог бы также использовать общий ответ, потому что в настоящий момент я даже не знаю, для чего нужен Google, и мне не хочется просто связываться со службой поддержки PETSc.


Я решил поработать над Ubuntu. Итак, вот сделка. После установки я пишу:

gcc -I $ PETSC_DIR / include -L $ PETSC_DIR / $ PETSC_ARCH / lib -libpetsc ex2

в командной строке. Я получаю массаж с ошибками:

/ usr / bin / ld: не удается найти -libpetsc ex2: в функции _start': (.text+0x1bc4): multiple definition of_start' /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): сначала определено здесь ex2: в функции _fini': (.fini+0x0): multiple definition of_fini' /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): сначала определено здесь ex2:(. родата + 0x0): множественное определение _IO_stdin_used' /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here ex2: In function__data_start': (.data+0x0): множественное определение __data_start' /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.data+0x0): first defined here ex2: In function__data_start': (.data+0x8): множественное определение __dso_handle' /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o:(.data+0x0): first defined here ex2: In function_init': (.init+0x0): множественное определение `_init' /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.init+0x0): сначала определено здесь collect2: ld вернул 1 статус выхода

3 ответа

Решение

Как упоминалось на веб-странице PETSc в разделе " Проблемы с контактами"? для проблемы, связанной с make вам нужно установить PETSC_DIR а также PETSC_ARCH напечатано настроить.

Чем это вызвано?:
makefile в src/ksp/ksp/examples/tutorials каталог относится к PETSC_DIR включить файлы конфигурации, т.е.

include ${PETSC_DIR}/conf/variables
include ${PETSC_DIR}/conf/rules

...
include ${PETSC_DIR}/conf/test

Теперь, когда вы выполняете make как раз make ex2 (так как из ошибки указывает, что вы не установили PETSC_DIR переменная), ${PETSC_DIR} пусто при этом make пытается включить /conf/variables, /conf/rules & /conf/test файлы, которых нет.

Как мне это исправить?
Ты должен бежать make как упоминалось на сайте как
make PETSC_DIR=<dir_output_from_configure> PETSC_ARCH=<arch_output_from_configure> ex2
Перед этим вам нужно правильно собрать исходный код. Чтобы уточнить, что вы упомянули в вопросе ./configure ... не устанавливает PETSc, а только настраивает источник для сборки. Вам нужно бежать make, Когда ты бежишь configure если он был успешным, он выведет детали конфигурации, включая PETSC_DIR а также PETSC_ARCH, Образец вывода:

./configure --with-mpi=0
===============================================================================
             Configuring PETSc to compile on your system                       
===============================================================================
TESTING: alternateConfigureLibrary from PETSc.packages.petsc4py(config/PETSc/packages/petsc4py.py:65)                                                                   Compilers:
...
...
PETSc:
  PETSC_ARCH: arch-linux2-c-debug
  PETSC_DIR: /XXXX/petsc-3.3-p1
  Clanguage: C
  Scalar type: real
  Precision: double
  shared libraries: disabled
  dynamic loading: disabled
  Memory alignment: 16
xxx=========================================================================xxx
 Configure stage complete. Now build PETSc libraries with (cmake build):
   make PETSC_DIR=/XXXX/petsc-3.3-p1 PETSC_ARCH=arch-linux2-c-debug all
 or (experimental with python):
   PETSC_DIR=/XXXX/petsc-3.3-p1 PETSC_ARCH=arch-linux2-c-debug ./config/builder.py
xxx=========================================================================xxx

Тогда ты побежал make PETSC_DIR=/XXXX/petsc-3.3-p1 PETSC_ARCH=arch-linux2-c-debug all как упомянуто в выходных данных configure, Это создаст библиотеки. Теперь вы должны быть в состоянии построить пример. (Обратите внимание, что это было запущено в Linux, вы должны в значительной степени сделать то же самое на Cygwin)
Примечание: нет необходимости устанавливать PETSC_ARCH для построения примера, вы должны быть в состоянии построить с make PETSC_DIR=<dir_output_from_configure> ex2

Надеюсь это поможет!

У меня такая же проблема. Вам просто нужно одно исправление. В make-файле, который показывает вышеупомянутую ошибку, просто дайте значение для PETSC_DIR переменная в make-файле. Например, для меня это было

PETSC_DIR=/Users/kanikas/ Документы / исследования / PETSc / PETSc-3.5.2

Замечания: PETSC_DIR должен быть корневым каталогом для petsc.

Я работаю над добавлением пути экспорта прямо в ~/.bashrc. Таким образом, мне не нужно писать путь снова и снова.

sudo nano ~/.bashrc

Перейти к последней строке файла:

#PETScXXX
export PETSC_DIR=/home/username/PETSc/petsc-3-8
export PETSC_ARCH=arch-linux2-c-debug

Каждый раз, когда вы запускаете оболочку, вы сможете получить доступ к правильному пути petsc и библиотекам.

Я надеюсь, что это может быть полезно для кого-то. (Работает Xubuntu 16.04 64bit)

Другие вопросы по тегам