【问题标题】:PETSc example not workingPETSc 示例不起作用
【发布时间】:2012-07-05 02:06:22
【问题描述】:

我有 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.

这是什么原因造成的?

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

*edit:我也可以使用一般性答案,因为目前我什至不知道谷歌是为了什么,而且我不想就所有事情都联系 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:(.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 个退出状态

【问题讨论】:

    标签: c makefile cygwin petsc


    【解决方案1】:

    遇到问题?部分PETSc web page 中所述,对于与make 相关的问题,您需要通过配置打印设置PETSC_DIRPETSC_ARCH

    是什么原因造成的?:
    src/ksp/ksp/examples/tutorials 目录中的makefile 引用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_DIRPETSC_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 进行构建

    希望这会有所帮助!

    【讨论】:

    • 好吧。我忘了提。运行上面提到的“./configure ...”代码后,我做了提示要求我做的事情,即“make PETSC_DIR .....”等。我读到库编译成功了。之后“make ex2”报告了我的问题中提到的错误。现在,当我尝试使用添加的“PETSC_DIR .....”命令运行“make PETSC_DIR ..... ex2”时,它至少为我做了一些事情(打印出一些关于某些文件夹的行)。我真的不知道我得到的是否正确,但这绝对不是错误按摩。
    • @user1487833:那么您能够构建和执行示例吗?如果没有,您可以发布控制台消息。或许能想出点什么
    • 我已经建立了示例,是的。谢谢。
    【解决方案2】:

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

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

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

    【讨论】:

    【解决方案3】:

    我正在直接在 ~/.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 位)

    【讨论】:

      猜你喜欢
      • 2013-12-04
      • 2016-08-31
      • 2016-02-25
      • 2015-01-23
      • 2017-09-11
      • 1970-01-01
      • 2011-11-13
      • 2014-08-29
      • 2018-07-21
      相关资源
      最近更新 更多