我在这里的集群上成功编译了一个带有boost的c ++程序。我需要运行SGE脚本来运行模拟。我得到的错误就是这个
./ main:加载共享时出错 库:libboost_thread.so.1.45.0: 无法打开共享对象文件:否 这样的文件或目录
启动程序时是否需要指定库的名称?我使用的脚本在
下面#!/bin/sh
# (c) 2008 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
# This is a simple example of a SGE batch script
# request Bourne shell as shell for job
#$ -S /bin/sh
#$ -N cr_number # this name shows in qstat
#$ -S /bin/bash # run with this shell
#$ -l h_rt=50:00:00 # need 50 hour runtime
#$ -pe mpich 4 # define parallel env
#$ -cwd # run the job in the directory specified.
#$ -o cr_number.out
#$ -e cr_number.err
# (-j will merge stdout and stderr)
#$ -notify
#$ -M user@abc.com - send mail about this job to the given email address.
#$ -m beas # send a mail to owner when the job
# begins (b), ends (e), aborted (a),
# and suspended(s). and suspended(s).
./main
谢谢
答案 0 :(得分:2)
最简单的选择是编译静态二进制文件。 (使用gcc
时,请使用-static
。对于其他编译器,使用RTFM。)
另一种选择是在作业脚本中将LD_LIBRARY_PATH
环境变量设置为包含Boost库的目录:
LD_LIBRARY_PATH=/where/ever/you/installed/boost
如果您没有自行安装Boost,可以使用ldd main
找到您的程序在哪里查找库。
答案 1 :(得分:0)
你在哪个平台上运行SGE?所有节点都是相同的架构吗?您使用的是哪些编译器?库需要存在,在您要动态运行它的每个节点上的相同位置。 @larsmans建议的选项可能是最好的主意(运行静态编译二进制文件)。