0

尝试运行 Repast HPC 可执行文件时,出现以下错误:

./main.exe: error while loading shared libraries: libboost_mpi-mt.so.1.61.0: cannot open shared object file: No such file or directory ./main.exe: error while loading shared libraries: libboost_mpi-mt.so.1.61.0: cannot open shared object

在 make 文件中,我使用以下内容定义了要在文件中提升的链接env

BOOST_INCLUDE= -I$(HOME)/sfw/Boost/Boost_1.61/include/
BOOST_LIB_DIR= -L$(HOME)/sfw/Boost/Boost_1.61/lib/

这链接到具有以下 make 文件的 make 文件

include ./env

.PHONY: clean
clean:
    rm -f *.o
    rm -f *.exe

.PHONY: compile
compile:
    $(MPICXX) $(BOOST_INCLUDE) -c Main.cpp -o Main.o
    $(MPICXX) $(BOOST_LIB_DIR) -o main.exe Main.o $(BOOST_LIBS)

.PHONY: all
all: clean compile

增强,tsnow@DESKTOP-IF7CEHL:~/sfw/Boost/Boost_1.61/lib$因此它应该很好地连接。

任何帮助表示赞赏,只是试图让教程运行。

4

2 回答 2

2

我们通常不会将 repast 链接到 boost,而是使用 rpath 让模型可执行文件知道 boost 和 repast 库的位置。例如在您的 Makefile 中:

REPAST_LIB_DIR = $(REPAST_HOME)/lib
BOOST_LIB_DIR = $(HOME)/theta/sfw/boost-1.66.0/lib
RPATHS += -Wl,-rpath -Wl,$(REPAST_LIB_DIR) -Wl,-rpath -Wl,$(BOOST_LIB_DIR)

然后在链接期间在库列表之后添加 $(RPATHS) 。

model : $(EXEC_OBJECTS)
    $(CXXLD) -fopenmp -dynamic $^ $(LIBS) $(RPATHS) -o $(NAME)

其中一些参数可能不适合 WSL,但希望 RPATHS 部分有意义。

所以,如果在你的 include 指令之后,你添加

RPATHS=-Wl,-rpath -Wl,$(BOOST_LIB_DIR)

并更新编译目标的第二行

$(MPICXX) $(BOOST_LIB_DIR) -o main.exe Main.o $(BOOST_LIBS) $(RPATHS)

你的 boost 库的位置被编译到 main.exe 中,它应该可以找到它。

于 2021-10-12T15:06:56.430 回答
0

命令:

export LD_LIBRARY_PATH=/home/tsnow/sfw/Boost/Boost_1.61/lib/

允许找到提升。

于 2021-10-13T15:27:10.717 回答