2017-02-08 6 views
0

MingWとcmakeを使ってFLTK(v。1.3.4.1)をダウンロードしてビルドしました。 しかし、私はFLTKとのリンクに問題があり、リンク中に未定義の参照がたくさんあります。 Windows用のMSYSやその他のシェルをインストールしていないため、 'fltk-config'スクリプトを使用することはできません。MingWとmakefilesを使うときにライブラリとリンクする方法

私のメイクファイルの知識は、まあまあで、公式のドキュメントとさまざまなインターネット情報源を使用して、以下が構築されています。

CC=g++ 
FLTK_INC=C:/frameworks/fltk-1.3.4-1 
FLTK_BIN=C:/frameworks/fltk-1.3.4-1/bin 
CFLAGS=-std=c++11 -Wall -I$(FLTK_INC) -v 
LDFLAGS=-L$(FLTK_BIN)/lib 
LDLIBS=-lfltk 
EXT=cc 
SOURCES=$(wildcard src/*.$(EXT)) 
OBJECTS=$(SOURCES:.$(EXT)=.o) 
EXECUTABLE=hello 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

.$(EXT).o: 
    $(CC) $(CFLAGS) $< -o [email protected] 

このメイクファイルには間違いがありますか、それとも他の場所にあるのでしょうか?

答えて

0

このメイクファイルには間違いがありますか、それとも他にも何かがありますか?

このメイクファイルには2つの問題があります。

LDFLAGS=-L$(FLTK_BIN)/lib 

$(LDFLAGS)それリンカを伝えるために、あなたのリンケージ レシピ内の適切な位置で発生します:あなたは、従来のGNUは、リンケージ・オプションの設定を確認してい

シング1

LDFLAGS=-L$(FLTK_BIN)/lib 
LDLIBS=-lfltk 

ディレクトリ $(FLTK_BIN)/libの中で、-lオプション(bef ore はデフォルトのディレクトリで検索します)。

LDLIBS=-lfltk 

$(LDLIBS)それは共有ライブラリlibfltk.so またはそれに失敗をリンクする必要があり、リンカを伝えるためにあなたのリンケージ レシピ、静的ライブラリlibfltk.aの適切な位置で発生します。 (Windowsでは、その他の拡張子 が受け入れられます)。

あなたのリンケージレシピ:

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

が適切な位置に$(LDFLAGS)を持っていますが、どこにでも$(LDLIBS) を持っていません。したがって、リンカーはlibfltkをリンクしようとしません。 あなたが参照している定義されていない参照エラーを説明する可能性は非常に高いですが、 ですが、あなたが何であるかを明らかにしていないので絶対に確信することはできません。より従来

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] $(LDLIBS) 

または:

連結レシピはあるべき

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $^ -o [email protected] $(LDLIBS) 

シング2

、コンパイルレシピ:

.$(EXT).o: 
    $(CC) $(CFLAGS) $< -o [email protected] 

は実際にはコンパイルレシピではありません。これはコンパイルとリンクのレシピです。 gcc/g++ は、コマンドラインオプション に-c(=コンパイルのみ)が含まれていない限り、常にリンケージを実行しようとします。レシピには の必要なリンケージオプション - $(LDFLAGS)$(LDLIBS) - が含まれていないため、 早期結合が失敗し、ビルドはそれ以上になりません。あなたはリンケージ・エラーを生成するものとして記録されてい コマンドライン:あなたのリンケージレシピの

$(CC) $(CFLAGS) $< -o [email protected] 

ない:

$(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

g++ -std=c++14 -Wall -IC:/frameworks/fltk-1.3.4-1 -v src/hw.cc -o src/hw.o 

があなたの「コンパイル」レシピの置換インスタンスであります

コンパイルレシピを修正するには、次のようにします。

$(CC) $(CFLAGS) $< -c -o [email protected] 

The GNU Make documentation が良好です。

+0

あなたの賢明なアドバイスをフォローしましたが、まだエラーがたくさんあります。 [リンク](http://pastebin.com/2tr3CuRg) –

+0

@slimandstackedエラーだけでなく、失敗したメイクの完全な出力を投稿してください。 –

+0

[ログ](http://pastebin.com/xr8GjcX6) –

関連する問題