2012-12-13 87 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++

相關問題