由g ++链接产生的未定义引用

时间:2010-02-21 05:15:05

标签: linker g++

我是g ++和Makefile的新手。我正在尝试链接这个BeBOP SMC库,它位于我的lib目录中。在lib目录下有bebop_util和sparse_matrix_converter,这两个目录都已经构建没有错误。我在sparse_matrix_converter下的bebop_util和libsparse_matrix_converter.a,libsparse_matrix_converter.so下看到了libbebop_util.a,libbebop_util.so。以下是来源:

生成文件

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依赖于sparse_matrix_converter,它取决于bebop_util。你能告诉我我可能犯的错误吗?感谢。

汤姆

1 个答案:

答案 0 :(得分:3)

BeBOP代码看起来是C代码,但没有添加正确的C ++防护。使用extern "C"包围您的包含以解决该问题:

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