Я новичок в 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
Просьба предложить то, что может быть неправильно или дополнительная информация для меня, чтобы предоставить. Благодарю.
Том
Спасибо за предложение. Я попытался снова с включенным bebop_util, как было отредактировано выше, и он все еще не работает. :( –
Я попытался установить путь в .cshrc на этот раз, и все сработало. Не уверен, что это имеет значение, когда setenv было сделано. Спасибо! –
Кроме того, вам нужно установить LD_LIBRARY_PATH, даже если вы явно задали -L для g ++? Спасибо. –