2015-11-17 10 views
5

最近私のPCにLinux Mintを再インストールする必要がありました。私はGLFWのような私のライブラリをすべて再インストールし、これまでに見たことのないエラーを見つけました。残念なことに私のgoogle-fuのスキルは、私のために働く修正を見つけることができなかったので、このエラーのために同程度には見えません。 Sidenote:これらのプログラムは、私の古いインストールでうまくコンパイルされ、Linux Mint 17.2も実行しているラップトップで完全にコンパイルされます。glfw3エラー:DSOコマンドラインから抜けて

これは私がコンパイルに使用してコンパイル文です:

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi 

これは、端末が私に出してくれるものです:だから

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libdl.so: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 

、私は取得しています、なぜ誰も私を伝えることができる場合この/またはそれを修正する方法は、それは絶対に素晴らしいだろう!助けを借りてくれてありがとう。

EDIT: これを試して修正するために、私はMintを2回再インストールしました。それは毎回出てくる。

EDIT 2: 私は周りを見渡していますが、それでもまだ問題が見つかりません。

答えて

11

紛失したシンボルはlibdlです。

追加のボーナスとして、私はあなたにMakefileを与えます。スペースではなくタブでインデントすることを忘れないでください。そうしないと、Makefileは機能しません。

all: out 
clean: 
     rm -f out *.o 
.PHONY: all clean 

CXX = g++ 
CPPFLAGS = 
CXXFLAGS = -std=c++11 -Wall -Wextra -g 
LIBS = -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -pthread -lXi -ldl 
LDFLAGS = 

out: main.o 
     $(CXX) $(LDFLAGS) -o [email protected] $^ $(LIBS) 

ただし、pkg-configを使用した方がずっと簡単です。私は(私は現在、Linux上ではないよので、私はチェックできない)私の頭の上から右のコマンドを知らないが、それは次のようになります。

packages = glfw3 
CPPFLAGS := $(shell pkg-config --cflags $(packages)) 
LIBS := $(shell pkg-config --libs $(packages)) 

あなたはしません。この方法をpkg-configがあなたのためにそれを把握するので、-ldlが必要であることを知る必要があります。これが標準的な方法です。

pkg-config --libs glfw3を実行して、出力を確認してください。インストールされていない場合はsudo apt-get install pkg-configを実行してください。私はちょうどそのような自分として経験の浅いプログラマのためのディートリッヒエップの答え簡素化したい

+0

右。ありがとう、たくさんの男。私は家に帰ると1時間後にこれを試してみます。私はmakefileを使用していますが、私はちょうど同じ問題を抱えていました。答えをありがとう、私はそれが動作する場合、答えとしてマークします! – DavidBittner

+0

これは私のために働いた。ありがとう、男!私がオンラインで見つけた他の多くの回答とは違って、あなたが "libDL"と言ったのが最も役に立ちました。それを知ることは実際のlibであり、単に "あなたのgccコマンドラインに-ldlを追加する"だけではなく、重要でした。 – rsethc

+1

ありがとう、これも私のために働いた! – SRG

4

:この問題を解決するために

を、あなたのコンパイラの方法で必要とされる何らかの手段でlibdlライブラリをリンクします。コマンドライン(GCC)を使用する場合:上記DavidBittnerから元のリンクコマンドとなるように連結するコマンドに「-ldl」を追加:

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl 

注「-ldl」が末尾に追加しました。

Cmakeを使用している場合は、追加のlibsのリストに "-ldl"を追加します。

+0

ありがとう、私の友人! –

+0

ありがとうございました! – SRG

関連する問題