2010-02-21 6 views
1

저는 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 아래에 있습니다. 아래는 소스입니다 :g ++ 링크로 인해 정의되지 않은 참조

메이크

CC=g++ 
CFLAGS=-c -Wall 

test.out: test.o 
    $(CC) -o test.out -Ilib/sparse_matrix_converter/include -Llib/bebop_util \ 
-Llib/sparse_matrix_converter -lbebop_util -lsparse_matrix_converter test.o 

test.o: test.cpp 
    $(CC) $(CFLAGS) -Ilib/sparse_matrix_converter/include test.cpp 

clean: 
    rm -f test.o test.out 

Test.cpp에

#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_input"); 
    destroy_sparse_matrix(A); 
    return 0; 
} 


출력 :

login3% make 
g++ -c -Wall -Ilib/sparse_matrix_converter/include test.cpp 
g++ -o test.out -Ilib/sparse_matrix_converter/include -Llib/bebop_util -Llib/sparse_matrix_converter -lbebop_util -lsparse_matrix_converter test.o 
test.o: In function `main': 
test.cpp:(.text+0x1a): undefined reference to `load_sparse_matrix(sparse_matrix_file_format_t, char const*)' 
test.cpp:(.text+0x27): undefined reference to `destroy_sparse_matrix(sparse_matrix_t*)' 
collect2: ld returned 1 exit status 
make: *** [test.out] Error 1 

test.cpp는 bebop_util에 의존하는 sparse_matrix_converter에 의존합니다. 내가 실수했을 때 어떤 실수를했는지 알려주시겠습니까? 감사.

+0

당신이 -lbebop_util -lsparse_matrix_converter에 연결하고, 그 이름이 모두 보이지 않습니다. 모든 것을 연결 했습니까? –

+0

주석 주셔서 감사합니다. 나는 모든 것에 연결되어 있다고 생각합니다. sparse_matrix_converter가 기본 라이브러리입니다. 라이브러리는 BeBOP SMC라고합니다. SMC는 스파 스 매트릭스 변환기의 약자입니다. –

답변

3

비밥 코드는 C 코드로 보이지만, 올바른 C++ 경비를 추가하지 않았습니다. 이 문제를 해결하기 위해 extern "C"으로 포함 서라운드 : 그들은 주요 라이브러리 것 같은

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

감사합니다. extern C를 추가하면 컴파일 오류가 사라집니다. 그러나 ./test.out : 공유 라이브러리를로드하는 동안 오류가 발생했습니다. libbebop_util.so : 공유 객체 파일을 열 수 없습니다 : 해당 파일이나 디렉토리가 없습니다. –

+0

권한이 libbebop_util.so에 대한 chmod 777을 통해 문제가 아닌지 확인하십시오. –

+0

새로운 문제가 다른 것으로 보이는 것처럼 대답을 수락합니다. 나는 새로운 문제를 게시 할 것이다. –