最近、PCにLinux Mintを再インストールする必要がありました。 GLFWなどのすべてのライブラリを再インストールしたところ、これまでにないエラーが発生しました。残念ながら、自分に合った修正を見つけることができなかったため、google-fuのスキルはこのエラーに耐えられないようです。補足:これらのプログラムは私の古いインストールで問題なくコンパイルされ、Linux Mint 17.2を実行する私のラップトップでも完全に問題なくコンパイルされました。
これは、コンパイルに使用するコンパイルステートメントです。
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 'dlclose@@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
だから、誰かが私になぜこれを取得しているのか、またはそれを修正する方法を教えてもらえれば、それは絶対に素晴らしいことです!助けてくれてありがとう。
編集:私はこれを試して修正するためにミントを2回再インストールしました。毎回現れます。
編集2:私はいじくり回していて、まだ問題を見つけていません。
不足している記号は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 $@ $^ $(LIBS)
ただし、pkg-config
を使用すると、はるかに簡単になります。私は頭の上から正しいコマンドを知りません(今はLinuxを使用していないので確認できません)。次のようになります。
packages = glfw3
CPPFLAGS := $(Shell pkg-config --cflags $(packages))
LIBS := $(Shell pkg-config --libs $(packages))
このようにすれば、-ldl
がそれを理解するので、pkg-config
が必要であることを知る必要さえありません。これが標準的な方法です。
pkg-config --libs glfw3
を実行して、出力を確認してください。インストールされていない場合は、Sudo apt-get install pkg-config
を実行します。
私のような経験の浅いプログラマのためのディートリッヒエップの答えを単純化したいだけです。
この問題を解決するには、コンパイラーメソッドで必要な手段でlibdlライブラリをリンクします。コマンドライン(gcc)を使用している場合:上記のDavidBittnerからの元のリンクコマンドが次のようになるように、リンクコマンドに「-ldl」を追加します。
g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl
最後に「-ldl」が追加されていることに注意してください。
Cmakeを使用している場合は、追加のライブラリのリストに「-ldl」を追加します。