我正在研究一个使用MPI创建并行进程的项目,每个进程使用dlopen()加载一个作为共享对象库构建的模块。我正在编写的一个模块使用第三方库(HDF)。当我运行程序时,dlopen抛出一个错误:
dlopen失败:home/jwomble/QTProjects/SurrogateModule/libsurrogate.so:未定义的符号:H5T_NATIVE_INT32_g
未定义的符号在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
upt移动到libsurrogate.so的链接应该可以解决问题。