1

gsl を使用するプログラムの次の Makefile があります。

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

何が問題なのですか?

PS - -c フラグが含まれていることは承知していますが、それを削除すると他の問題が発生します。

4

1 に答える 1

2

コンパイル/リンク中に次の出力が得られます

いいえ、あなたはしません。コンパイル中にこの警告が表示され、問題が何であるかが正確にわかります。コマンドラインで一緒に-lgsl渡され、リンクを実行していないときは無視されます(これが要求されます)。-c-lgsl-cg++

今、あなたにMakefileは別-cの場所がないので、全体をカット/ペーストせずMakefile、ここに関連する詳細を正確に省略した可能性があります.

更新:これはあなたが望まない行です$(GSLFLAGS)

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

最後に、このリンク行:

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

間違っています: コマンド ラインでのソース/オブジェクトとライブラリの順序が重要です。正しいリンク行は次のとおりです。

$(CXX) $(CXXFLAGS) myProgram.cpp common.o -o myProgram $(GSLFLAGS)
于 2013-01-10T06:50:45.680 に答える