0

g++ と Makefile は初めてです。lib ディレクトリにあるこの BeBOP SMC ライブラリをリンクしようとしています。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 の下に表示されます。以下はソースです:

メイクファイル

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

何が間違っているのか、または私が提供する追加情報を提案してください。ありがとう。

トム

4

2 に答える 2

1

入っているディレクトリがlibbebop_util.soLD_LIBRARY_PATH に記載されていますか? ビルド ラインに基づいて、次のように動作するはずです。

env LD_LIBRARY_PATH=./lib:${LD_LIBRARY_PATH} ./test_out
于 2010-02-22T22:06:13.227 に答える
1

リンクに問題はないようです。代わりに、ビルドされた実行可能ファイルに無効な libbebop_util.so への参照があることが問題です。

実行ldd test.outして、共有ライブラリを探している場所を確認してください。

于 2010-02-22T22:07:26.380 に答える