首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PETSc示例不起作用

PETSc示例不起作用
EN

Stack Overflow用户
提问于 2012-07-04 14:44:50
回答 3查看 6K关注 0票数 3

我有Windows 7操作系统。我遵循了PETSc网页的指示;在VS 2005的命令提示符中,我打开了cygwin并使用以下命令安装了PETSc:

代码语言:javascript
复制
./configure --with-cc='win32fe cl' --with-fc=0 --with-mpi=0 --download-f2cblaslapack

我试图从网页上运行以下示例:

代码语言:javascript
复制
cd src/ksp/ksp/examples/tutorials

make ex2

ex2.c是一个c程序代码。我得到以下错误:

代码语言:javascript
复制
$ 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: In function _start': (.text+0x1bc4): multiple definition of_start‘ex2: In function _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‘__dso_handle' /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o:(.data+0x0): first defined here ex2: In function的多个定义-gnu/crti.o:(.init+0x0):首先在这里定义collect2: ld返回1个退出状态

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-05 17:47:49

正如在PETSc网页上提到的章节中遇到的问题?对于与make相关的问题,需要设置通过配置打印的PETSC_DIRPETSC_ARCH

是什么引起的?

makefile目录中的src/ksp/ksp/examples/tutorials引用PETSC_DIR来包含配置文件,即

代码语言:javascript
复制
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_DIRPETSC_ARCH在内的配置细节。样本输出:

代码语言:javascript
复制
./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进行构建。

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2015-03-06 20:58:23

我也有同样的问题。你只需要一个解决办法。在显示上述错误的makefile中,只需给出makefile中PETSC_DIR变量的值。例如,对我来说

PETSC_DIR=/Users/kanikas/Documents/research/petsc/petsc-3.5.2

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

票数 2
EN

Stack Overflow用户

发布于 2017-10-30 21:06:52

我正在工作,直接在~/..bashrc中添加导出路径。这样我就不需要一遍又一遍地写这条路了。

代码语言:javascript
复制
sudo nano ~/.bashrc

转到文件的最后一行:

代码语言:javascript
复制
#PETScXXX
export PETSC_DIR=/home/username/PETSc/petsc-3-8
export PETSC_ARCH=arch-linux2-c-debug

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11331289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档