web-dev-qa-db-ja.com

g ++は、「-ldl」を使用しても、シンボル「dlclose @@ GLIBC_2.2.5」への未定義の参照で失敗します

私はsconsを使用してGLADとSDL2でプログラムをコンパイルしようとしています(ただし、s ++はg ++が問題であるため、実際には関係ありません)。

sconsは次のコマンドを実行して、プログラムの一部をコンパイルします。

g++ -o out/cpptest bin/src/MainTest.o bin/src/main.o -L/usr/local/lib -Lbin/lib -ldl -lm -lGL -lGLU -lX11 -lpthread -lXi -lXrandr -lXxf86vm -lXinerama -lXcursor -lrt -lglad -lSDL2 -pthread

g ++は次のエラーメッセージを返します。

/usr/bin/ld: bin/lib/libglad.a(glad.c.o): undefined reference to symbol 
'dlclose@@GLIBC_2
.2.5'
 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libdl.so: error 
 adding symbols: DSO missing from command line
 collect2: error: ld returned 1 exit status

いくつかのアドバイスは高く評価されます。

また、次のフラグが存在することに注意してください。

    -ldl -lm -lpthread -pthread
2
codedcosmos

フラグ「-Wlおよび--start-group」を追加するだけです

sconsの場合は、LINKFLAGS = ['-Wl、-start-group']を追加します。

リファレンス: https://stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries-are-linked-sometimes-cause-errors-in-gcc

2
codedcosmos