在我运行应用程序的集群的操作系统之后
PETSC
(3.19版)已从CentOS 7更改为Rocky Linux 8,模块系统也更改为Lmod,我得到了几个
error: symbol lookup error: undefined symbol:
错误消息。
使用启动应用程序时
make
,在按用户方向中止作业之前,不会发生任何事情。使用运行应用程序时
LD_DEBUGS=files
,我收到了几个与中的符号有关的错误消息
UCX
,例如:
/cvmfs/software.hpc.rwth.de/Linux/RH8/x86_64/intel/skylake_avx512/software/UCX/1.12.1-GCCcore-11.3.0/lib/ucx/libuct_cma.so.0: error: symbol lookup error: undefined symbol: ucs_module_global_init (fatal)
此外,当与一起运行时,会显示这两条错误消息
LD_DEBUGS=文件
/rwthfs/rz/cluster/home/mh787286/petsc/arch-linux-c-debug/lib/libpetsc.so.3.19: error: symbol lookup error: undefined symbol: MPID_Abort (fatal)
/rwthfs/rz/cluster/home/mh787286/petsc/arch-linux-c-debug/lib/libpetsc.so.3.19: error: symbol lookup error: undefined symbol: ps_tool_initialize (fatal)
我有个习惯
Makefile
,看起来是这样的:
### VARIABLES
ifndef PETSC_DIR
PETSC_DIR=petsc/arch-linux-c-debug
ifdef R_SLURM_ROLES
module load GCC/11.3.0 OpenMPI/4.1.4
endif
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
PETSC_DIR=/usr/local/Cellar/petsc/3.18.5
endif
endif
include $(PETSC_DIR)/lib/petsc/conf/petscvariables
CFLAGS=-Werror -ggdb -Wall -D_GNU_SOURCE -Wno-nullability-completeness
INCLUDES=$(PETSC_CC_INCLUDES)
LDFLAGS=-L$(LD_LIBRARY_PATH) -L$(PETSC_DIR)/lib -lm $(PETSC_LIB_BASIC)
ifeq ($(UNAME_S),Darwin)
LDFLAGS=-L$(PETSC_DIR)/lib -lm $(PETSC_LIB_BASIC)
endif
GMSH = gmsh
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(PETSC_DIR)/arch-linux-c-debug/lib
### RUNTIME OPTIONS
MPIOPTS=-np 1 # currently no parallel support
SRC := $(wildcard src/*.cpp) $(wildcard src/**/*.cpp)
OBJ := $(SRC:%.cpp=obj/%.o)
# Meshes
GEO := $(wildcard meshdata/*-1D.geo)
MSH := $(GEO:%.geo=%.msh)
# Systems
SYS := $(wildcard sysdata/*.sys)
DEF := $(SYS:%.sys=%.def)
# PetSc Options
TOL=-snes_atol 1e-8 -snes_rtol 1e-30 -snes_stol 1e-16 -ts_pseudo_fatol 1e-8 -ts_pseudo_frtol 1e-30
MONITOR=-snes_converged_reason #-snes_monitor
OPTS=$(MONITOR) $(TOL) -snes_max_it 10 # -info
.PHONY: clean all debug valgrind test sys
all: memristor sys
run: sys memristor
@rm -rf outdata/memristor2
@mv outdata/memristor outdata/memristor2 || true # cache last result
@echo "[EX] >>> "$<
$(LDPATH) $(MPIEXEC) -n 1 ./memristor $(OPTS)
run-parallel: sys memristor
$(LDPATH) $(MPIEXEC) -n 2 ./memristor $(OPTS)
### PATTERNS
obj/%.o: %.cpp
@echo "[CC] >>> "$<
@mkdir -p $(dir $@)
@$(CXX) $(CFLAGS) $(INCLUDES) -std=c++11 -c $< -o $@
%1D.msh: %1D.geo
@echo "[GM] >>> "$<
$(GMSH) -1 -format msh22 $< -o $@
### Gmsh -1 -format msh22 input.geo -o output.msh
%.def: %.sys
@echo "[DG] >>> "$<
@sysdata/defgen3.py $< > $@
### MESHES
geo: $(MSH)
### SYSTEMS
sys: $(DEF)
### APPLICATIONS
bpm: $(OBJ) obj/bpm.o
@echo "[LD] >>> "$@
$(CXX) $(OBJ) obj/bpm.o -o $@ $(LDFLAGS)
bpm-run: sys bpm
@echo "[EX] >>> "$<
$(LDPATH) $(MPIEXEC) -n 1 ./bpm $(POTENTIAL) $(OPTS)
cathode: $(OBJ) obj/cathode.o
@echo "[LD] >>> "$@
$(CXX) $(OBJ) obj/cathode.o -o $@ $(LDFLAGS)
cathode-run: sys cathode
@echo "[EX] >>> "$<
$(LDPATH) $(MPIEXEC) -n 1 ./cathode $(OPTS)
valgrind-cathode: cathode
@echo "[VG] >>> "$<
@$(LDPATH) valgrind --leak-check=full --track-origins=yes --show-leak-kinds=all --log-file=valgrind-out.txt ./cathode
callgrind-cathode: cathode
@echo "[VG] >>> "$<
@$(LDPATH) valgrind --tool=callgrind ./cathode # --track-origins=yes
clean:
rm -rf obj/*
我已经查找了需要链接才能运行的共享库
PETSC
他们似乎都在里面
LD_LIBRARY_PATH
。所以我很难确定是什么原因导致了这个问题。我还是个初学者
PETSC
,所以我们非常感谢您的帮助和建议。非常感谢。