PETSc示例不起作用

时间:2012-07-04 14:44:50

标签: c makefile cygwin petsc

我有Windows 7操作系统。 我按照PETSc web page的说明进行了操作;在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是一个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.

造成这种情况的原因是什么?

(更重要的是) 我该如何解决?

*编辑:我也可以使用一般性答案,因为目前我甚至不知道谷歌会做什么,我不想只是联系PETSc支持。


我决定在Ubuntu上工作。所以现在,这是交易。安装完成后我写道:

  

gcc -I $ PETSC_DIR /包含-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 :(。rodata + 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 个答案:

答案 0 :(得分:0)

PETSc web page部分遇到问题?部分所述,与make相关的问题需要设置PETSC_DIRPETSC_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}为空,因此{{ 1}}尝试包含make/conf/variables& /conf/rules个不存在的文件。

如何解决?
您必须按照网站上的说明运行/conf/test make
在此之前,您需要正确构建源。要澄清你在问题make PETSC_DIR=<dir_output_from_configure> PETSC_ARCH=<arch_output_from_configure> ex2中提到的内容,不会安装PETSc,只会配置构建源。您需要运行./configure ...。如果成功运行make,则会输出包含configurePETSC_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。这将构建库。现在您应该能够构建示例了。 (请注意,这是在Linux上运行的,你应该能够在cygwin上做同样的事情)
附注:似乎没有必要设置configure来构建示例,您应该能够使用PETSC_ARCH构建

希望这有帮助!

答案 1 :(得分:0)

我遇到了同样的问题。你只需要一个修复。在显示上述错误的makefile中,只需在makefile中为PETSC_DIR变量赋值。例如,对我来说是

  

PETSC_DIR = /用户/ kanikas /文档/研究/ PETSc的/ PETSc的-3.5.2

注意:PETSC_DIR应该是petsc的根目录。

答案 2 :(得分:0)

我正在直接在〜/ .bashrc中添加导出路径。这样我就不需要一遍又一遍地写道。

sudo nano ~/.bashrc

转到文件的最后一行:

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

每次启动shell时,您都可以访问正确的petsc路径和库。

我希望这可以对某人有所帮助。 (运行Xubuntu 16.04 64位)