0

我正在开发一个使用 MPI 创建并行进程的项目,每个进程都使用 dlopen() 加载已构建为共享对象库的模块。我正在编写的模块之一使用 3rd 方库 (HDF)。当我运行程序时,dlopen 抛出错误:dlopen failed: /home/jwomble/QTProjects/Sur​​rogateModule/libsurrogate.so: undefined symbol: 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 $<

谢谢!

4

1 回答 1

1

您实际上并没有链接到 hdf5。-l与 .一起使用时,标志是无用的-c

移动-lhdf5到 libsurrogate.so 的链接应该可以解决问题。

于 2012-04-12T17:11:15.307 回答