3

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

这是什么原因造成的?

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

*编辑:我也可以使用一般答案,因为目前我什至不知道谷歌是为了什么,而且我不想只是联系 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: 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' 的多重定义 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:( .init+0x0): 这里首先定义 collect2: ld 返回 1 退出状态

4

3 回答 3

2

正如PETSc 网页遇到的问题?与您相关的问题make需要通过configure进行设置PETSC_DIRPETSC_ARCH打印。

这是什么原因造成的?: in目录是指包含配置文件
,即makefilesrc/ksp/ksp/examples/tutorialsPETSC_DIR

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

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

现在,当您正在执行makemake 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

希望这可以帮助!

于 2012-07-05T17:47:49.950 回答
1

我有同样的问题。你只需要一个修复。在显示上述错误的生成文件中,只需给出PETSC_DIR生成文件中变量的值即可。例如,对我来说是

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

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

于 2015-03-06T20:58:23.917 回答
1

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

于 2017-10-30T21:06:52.977 回答