2010-02-22 3 views
0

Я новичок в g ++ и Makefile. Я пытаюсь связать эту библиотеку BeBOP SMC, которая находится в моем каталоге lib. В каталоге lib находятся bebop_util и sparse_matrix_converter, оба из которых уже построены без ошибок. Я вижу libbebop_util.a, libbebop_util.so под bebop_util и libsparse_matrix_converter.a, libsparse_matrix_converter.so под sparse_matrix_converter. Ниже источник:Ошибка, включая общую библиотеку

Makefile

CC=g++ 
CFLAGS=-c 
# CFLAGS=-c -Wall 
INCLUDE_DIRS=-Ilib/bebop_util/include -Ilib/sparse_matrix_converter/include 
LIB_DIRS=-Llib/bebop_util -Llib/sparse_matrix_converter 
LIBS=-lbebop_util -lsparse_matrix_converter 

test.out: test.o 
     $(CC) -o test.out $(LIB_DIRS) $(LIBS) test.o 

test.o: test.cpp 
     $(CC) $(CFLAGS) $(INCLUDE_DIRS) test.cpp 

clean: 
     rm -f test.o test.out 

test.cpp

extern "C" { 
#include <bebop/smc/sparse_matrix.h> 
#include <bebop/smc/sparse_matrix_ops.h> 
} 

int main(int argc, const char* argv[]) 
{ 
     struct sparse_matrix_t* A = load_sparse_matrix (MATRIX_MARKET, "sample_i 
nput"); 
     destroy_sparse_matrix(A); 
     return 0; 
} 

В качестве меры предосторожности, у меня также есть набор LD_LIBRARY_PATH:

login4% setenv | grep LD_LIBRARY_PATH 
LD_LIBRARY_PATH=/share/apps/teragrid/globus-4.0.8-r1/myproxy-3.4/lib:/share/apps/teragrid/globus-4.0.8-r1/lib:/share/apps/teragrid/srb-client-3.4.1-r1/lib:/opt/apps/pgi7_2/mvapich/1.0.1/lib:/opt/apps/pgi7_2/mvapich/1.0.1/lib/shared:/opt/apps/pgi/7.2-5/linux86-64/7.2-5/libso:/opt/gsi-openssh-4.3/lib:/opt/apps/binutils-amd/070220/lib64:/share/home/01355/tomwang/cs380p_assn3/lib:/share/home/01355/tomwang/cs380p_assn3/lib/bebob_util:/share/home/01355/tomwang/cs380p_assn3/lib/sparse_matrix_converter 

Выход

login3% make 
g++ -c -Ilib/bebop_util/include -Ilib/sparse_matrix_converter/include test.cpp 
g++ -o test.out -Llib/bebop_util -Llib/sparse_matrix_converter -lbebop_util -lsparse_matrix_converter test.o 
login3% ./test.out 
./test.out: error while loading shared libraries: libbebop_util.so: cannot open shared object file: No such file or directory 

Просьба предложить то, что может быть неправильно или дополнительная информация для меня, чтобы предоставить. Благодарю.

Том

ответ

1

Вы уверены, что каталог, который находится в libbebop_util.so упоминается в вашем LD_LIBRARY_PATH? На основе вашей линии сборки должно работать следующее:

env LD_LIBRARY_PATH=./lib:${LD_LIBRARY_PATH} ./test_out 
+0

Спасибо за предложение. Я попытался снова с включенным bebop_util, как было отредактировано выше, и он все еще не работает. :( –

+0

Я попытался установить путь в .cshrc на этот раз, и все сработало. Не уверен, что это имеет значение, когда setenv было сделано. Спасибо! –

+0

Кроме того, вам нужно установить LD_LIBRARY_PATH, даже если вы явно задали -L для g ++? Спасибо. –

1

Похоже, что у вас нет проблем со связыванием. Вместо этого проблема заключается в том, что ваш встроенный исполняемый файл имеет ссылку на libbebop_util.so, что является недопустимым.

Попробуйте запустить ldd test.out, чтобы узнать, где он ищет общие библиотеки.

+0

Спасибо. Предложение было очень полезным как я пытаюсь из разных вещей. Жаль, что у меня нет 15 репутации для голосования. –