linux - 共享对象库和 MPI

标签 linux shared-libraries mpi dlopen

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

相关文章:

linux - 如何显示覆盖视频源的图像?

c++ - 具有重复符号的 C++ 插件库上的段错误

c - 在这里用 gcc 创建/使用共享库有什么问题?

c - openmpi:如何将未连接的数据 block 从一个等级发送到所有其他等级?

c++ - 在 MPI、C++ 上分配单个堆栈数组

linux - 默认情况下,如何在 MPI 环境中管理内存?

linux - 根据 zip 文件中包含的文件名将单个 ".zip"文件解压缩到多个目录中 - Linux

c++ - 如何等待一组子进程(并且仅等待它们)而不轮询并且不消耗其他子进程的退出代码?

linux - 计算 PATH 中每个变量中的可执行文件数

android - 从 Android native Activity 加载第 3 方共享库