2011-01-19 66 views
1

我在這裏的集羣上成功地用C++編譯了一個帶boost的程序。我需要運行一個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 [email protected] - 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

你是怎麼建立`main`的? – 2011-01-19 19:52:54

回答

2

最簡單的方法是編譯靜態二進制。 (隨着gcc,使用-static對於其他的編譯器,RTFM。)

另一種選擇是將LD_LIBRARY_PATH環境變量設置爲目錄包含Boost庫,作業腳本里面:

LD_LIBRARY_PATH=/where/ever/you/installed/boost 

如果你沒不要安裝Boost,你可以通過ldd main找到你的程序在哪裏尋找它的庫。

+0

我對這個愚蠢的問題表示歉意,但是我只是在它的結尾指定了-static?通過發佈此:gcc -Wall -o main main.cpp Graph.cpp Simulate.cpp -lm -I ../ boost_1_45_0/-L ../ boost_1_45_0/stage/lib/-lboost_thread -static 我得到了一個巨大的數字錯誤行......謝謝 – Bob 2011-01-19 20:05:44

+0

我認爲你需要在`-l`選項之前加上`-static`。如果它不起作用,請嘗試設置`LD_LIBRARY_PATH`。首先在您的前端節點上嘗試`LD_LIBRARY_PATH = ../boost_1_45_0。/ main`。 – 2011-01-19 20:08:26

0

你在哪個平臺上運行SGE?所有的節點都是相同的架構嗎?你正在使用哪種編譯器?該庫需要存在,在您要運行的每個節點上的相同位置。 @larsmans建議的選項可能是最好的想法(運行靜態編譯的二進制文件)。