2012-12-13 70 views
2

当我尝试构建应用程序时,出现链接器错误undefined reference to (..)。所有未找到的函数都从meschach库中导入。在我看来库已正确安装:使用meschach库构建应用程序时出现链接器错误

whereis libmeschach 
libmeschach: /lib/libmeschach.so /usr/lib/libmeschach.so /lib64/libmeschach.so 

我SCons的文件:

import os 
import sys 
import functools 

PROJECT_ROOT = os.path.curdir 
doc_path = functools.partial(os.path.join, PROJECT_ROOT, 'doc') 
src_path = functools.partial(os.path.join, PROJECT_ROOT, 'src') 
out_path = functools.partial(os.path.join, PROJECT_ROOT, 'build') 

cpp_flags = { 
    'linux2' : '-Wall -Wextra -pedantic -fopenmp -O3', 
    'win32' : '/w /MD /openmp' 
} 

env = Environment(ENV=os.environ,CPPFLAGS=cpp_flags[sys.platform])  
env.VariantDir(variant_dir=out_path(),src_dir=src_path()) 

env.Program(target=out_path('cholesky'), source=Glob(out_path('*.cpp')), LIBS=['m']) 

我使用Arch Linux的64位。

编辑:我SCons的替换用的Makefile,但错误依然存在:

CC=g++ 
CFLAGS=-c -Wall -Wextra -pedantic -I./externals/include 
LIB=./externals/lib/meschach.a -lm 

all: cholesky 

cholesky: cholesky.o equation.o testing.o profiler.o parallelCholeskyTest.o matrix.o 
$(CC) cholesky.o equation.o testing.o profiler.o parallelCholeskyTest.o matrix.o -o 
    main $(LIB) 

cholesky.o: 
$(CC) $(CFLAGS) src/cholesky.cpp 

equation.o: matrix.o 
$(CC) $(CFLAGS) src/equation.cpp 

matrix.o: 
$(CC) $(CFLAGS) src/matrix.cpp 

testing.o: 
$(CC) $(CFLAGS) src/testing.cpp 

profiler.o: 
$(CC) $(CFLAGS) src/profiler.cpp 

parallelCholeskyTest.o: 
$(CC) $(CFLAGS) src/parallelCholeskyTest.cpp 
+2

尝试添加libmeschach到库列表,即尝试将LIBS = ['m']'改为LIBS = ['m','meschach']'。请检查[此链接](http://www.scons.org/doc/0.97/HTML/scons-user/x628.html)以获取更多关于链接的信息。 –

+0

不幸的是,它没有帮助。 –

+0

嗯,当实际编译发生时,你是否看到链接的库或任何东西?你能检查确切的'gcc'编译命令,你得到这个错误? –

回答

1

确定。我解决了它。此库不能作为C++库包含,并且您必须将每个#includeextern "C" { }包装在一起。在这里你可以找到更多关于这个问题:C-library not linking using gcc/g++

相关问题