2013-01-10 122 views
1

我有以下的Makefile使用GSL程序:編譯/鏈接GSL

CXX = g++ 
ARCH = -mtune=generic 
COFLAGS = $(ARCH) -O3 -pipe -I./gsl 
CXXFLAGS = -Wall $(COFLAGS) 

PROGRAMS = myProgram 
GSLFLAGS= -L./gsl/.libs -lgsl -L./gsl/cblas/.libs -lgslcblas -lm 

all: $(PROGRAMS) 
myProgram: myProgram.cpp common.o 
    $(CXX) $(CXXFLAGS) $(GSLFLAGS) myProgram.cpp common.o -o myProgram 
common.o: common.cpp common.h 

common.o: common.h common.cpp 
    $(CXX) $(CXXFLAGS) $(BOOSTFLAGS) $(GSLFLAGS) -c common.cpp 

我得到的編譯過程如下輸出/連接:

g++: -lgsl: linker input file unused because linking not done 

任何想法有什麼不對?

P.S. - 我知道-c標誌涉及到它,但刪除它會導致其他問題。

+0

「我知道-c標誌參與其中,但刪除它會導致其他問題。」 - 當然是的。您應該刪除'$(GSLFLAGS)'。 –

回答

2

我在編譯過程中得到以下輸出/聯

不,你不知道。你是否會在編譯這個警告,它會告訴你正是的問題是什麼:你逝去-lgsl-c一起在命令行,當你做鏈接(這是什麼-c要求-lgsl被忽略g++要做)。

現在,您的Makefile在任何地方都沒有單獨的-c,所以很可能您沒有剪切/粘貼您的整個Makefile,並且完全忽略了與此處相關的詳細信息。

更新:這就是你不想$(GSLFLAGS)行:

$(CXX) $(CXXFLAGS) $(BOOSTFLAGS) $(GSLFLAGS) -c common.cpp 

最後,鏈接線:

$(CXX) $(CXXFLAGS) $(GSLFLAGS) myProgram.cpp common.o -o myProgram 

是錯誤的:源/目標的順序和在命令行matters上的庫。正確的鏈接線應該是:

$(CXX) $(CXXFLAGS) myProgram.cpp common.o -o myProgram $(GSLFLAGS) 
+0

在鏈接過程中排序總是很棘手。感謝提醒,解決了很多問題。 –