我正在开发一个使用 MPI 创建并行进程的项目,每个进程都使用 dlopen() 加载一个已构建为共享对象库的模块。我正在编写的其中一个模块使用了第 3 方库 (HDF)。当我运行程序时,dlopen 抛出一个错误: dlopen 失败:/home/jwomble/QTProjects/SurrogateModule/libsurrogate.so: undefined symbol :H5T_NATIVE_INT32_g
undefined symbol 在 HDF 库中。如何从 HDF 库加载符号?
目前,我的 make 文件如下所示:
CC = mpicc
INCDIR = -I /home/jwomble/QTProjects/STARExecutive/src/star_comm \
-I /home/jwomble/QTProjects/STARExecutive/src/executive \
-I /home/jwomble/QTProjects/Star \
-I ./phdf/include
CFLAGS = -Wall -rdynamic -g -fPIC $(INCDIR)
all: libsurrogate.so
libsurrogate.so: SurrogateModule.o
$(CC) -shared --export-dynamic -o $@ $<
SurrogateModule.o: SurrogateModule.c
$(CC) $(CFLAGS) -lhdf5 -c $<
谢谢!
最佳答案
您实际上并没有链接到 hdf5。 -l
标志与 -c
一起使用时没有用。
将 -lhdf5
移动到 libsurrogate.so 的链接应该可以解决问题。
关于linux - 共享对象库和 MPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128366/