2011-12-28 2 views
2

です。リンカーは-lglut

私はLinuxデベロッパーの世界では少し新しくなっています(ideはありません)ので、気をつけてください。

問題は、私はその後、いくつかのライブラリと一緒にリンクされている.oファイルにおよそ7-8ファイルをコンパイル構築メイクファイルを持っています。私はこれらの図書館に所在しており、その開発者の対応者はです。が存在します。問題は、リンカーがそれらを見つけることを拒否していることです。私の出力(私がこれを正しく読んでいる場合)は、間違った場所を探していると私に伝えます。 をエクスポートして/usr/libを追加しました。これは私の.so.ファイルです。私の主な質問は、-lglew-lglutをどうやってリンクさせるのですか? .oファイルをobjフォルダに、私のバイナリをbinフォルダに入れたいと思います。これはメイクファイルで可能ですか?もしそうなら、私のmakeファイルを与えて、これを行うための最良のレシピは何ですか?

Makefileの

1 BIN = bin/ 
    2 OBJ = obj/ 
    3 TARGET = opengl_03 
    4 DEPS = main.o displayinit.o initializer.o algorithms.o matrix3f.o window.o vertex3.o 
    5 CC = g++ 
    6 CFLAGS = -g -m32 
    7 LIBS = -lglut -lGLEW 
    8 INCLUDEPATH = -L/usr/include/ -L/usr/lib 
    9 
10 $(TARGET) : $(DEPS) 
11  $(CC) $(LIBS) $(INCLUDEPATH) $(CFLAGS) -o $(TARGET) $(DEPS) $(BIN) 
12 
13 displayinit.o : displayinit.cpp displayinit.h 
14  $(CC) -c displayinit.cpp $(OBJ) 
15 initializer.o : initializer.cpp initializer.h 
16  $(CC) -c initializer.cpp $(OBJ) 
17 algorithms.o : algorithms.cpp algorithms.h 
18  $(CC) -c algorithms.cpp $(OBJ) 
19 matrix3f.o : matrix3f.cpp matrix3f.h 
20  $(CC) -c matrix3f.cpp $(OBJ) 
21 vertex3.o : vertex3.cpp vertex3.h 
22  $(CC) -c vertex3.cpp $(OBJ) 
23 window.o : window.cpp window.h 
24  $(CC) -c window.cpp $(OBJ) 
25 main.o : main.cpp 
26  $(CC) -c main.cpp $(OBJ) 
27 
28 clean: 
29  rm $(DEPS) 
30 
31 

出力

g++ -lglut -lGLEW -L/usr/include/ -L/usr/lib -g -m32 -o opengl_03 main.o displayinit.o initializer.o algorithms.o matrix3f.o window.o vertex3.o bin/ 
/usr/bin/ld: skipping incompatible /usr/lib/libglut.so when searching for -lglut 
/usr/bin/ld: skipping incompatible /usr/lib/libglut.a when searching for -lglut 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libglut.so when searching for -lglut 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libglut.a when searching for -lglut 
/usr/bin/ld: skipping incompatible /usr/lib/libglut.so when searching for -lglut 
/usr/bin/ld: skipping incompatible /usr/lib/libglut.a when searching for -lglut 
/usr/bin/ld: cannot find -lglut 
/usr/bin/ld: cannot find -lGLEW 
/usr/bin/ld: cannot find bin/: File format not recognized 
collect2: ld returned 1 exit status 
make: *** [opengl_03] Error 1 

私は援助を感謝しています。

+0

'-m32'を使って32ビット版をビルドしていますが、'/usr/lib/libglut.so'(そして他のglutライブラリ)が64ビットのライブラリであるようですね?参照するには 'file/usr/lib/libglut.so'コマンドを実行してください。 – birryree

+0

http://stackoverflow.com/questions/4052542/gcc-m32-flag-usr-bin-ld-skipping-incompatible? – ibid

答えて

2

どのLinuxをお使いですか?あなたが64ビットシステムを使用しているようですが、(-m32コンパイラスイッチのために)32ビットアプリケーションをコンパイルしようとしています。したがって、-m32を削除するか、32ビットの開発ライブラリをインストールしてください。それらはfreeglut-32bitのような名前が付けられています。

2

は/ usr/binに/ LD:互換性のない/usr/lib/libglut.soをスキップ-lglut

を検索するときに、それはLDがlibglut.soを見つけたが、それは-m32目標のために良い候補ではないことを意味します。

PS、BINはdirです、なぜあなたはそれをコンパイルオブジェクトに入れますか?

$(CC) $(LIBS) $(INCLUDEPATH) $(CFLAGS) -o $(TARGET) $(DEPS) $(BIN) 
+0

私はそれを私のbinフォルダに移動するのに必要なものだと思っていました。別の方法がありますか? – zeboidlund

+1

-o $(BIN)/ $(TARGET) – pinxue

関連する問題