Пример 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)